2009-10-28 63 views
6

我要刪除我的陣列的一些元素,但沒有重新排列。最佳方式,它

如果我使用「刪除」刪除我的元素,在「洞」佔用內存?

var array=["A","B","C"]; 
delete array[1]; // array -> ["A", undefined, "C"] 

我想刪除的元素被真正刪除,因此不佔用內存空間,是不是真的?

回答

4

完全取決於執行。在內部,所有JS表示將最終轉換爲稀疏表示,但備用表示傾向於每個元素使用更多內存,訪問速度比非稀疏數組慢。

出於這個原因,從密集陣列去除onevalue不大可能releas任何存儲器,但足夠的元素集合中被移除後,執行將有可能轉換成的稀疏表示,以總節省內存。

注:該指數在你刪除的對象或值將不會被立即刪除 - 刪除只是從對象中刪除的特性槽 - 對象/值只有GC通期間被移除,且僅當沒有其他參考。

3

您可以使用array.splice(1, 1);它會在索引1中刪除一個條目中的第一個參數是指數,第二個是計數。

+1

沒有REARRANGE它,所以拼接不是我所期待的。 – blow 2009-10-28 20:18:02

9

使用try,

array.splice(index, 1); 

Mastering JavaScript Arrays

+0

沒有REARRANGE它,所以拼接不是我所期待的。 – blow 2009-10-28 20:18:33

+3

該數組沒有用拼接重新排列,索引被完全刪除。 你的意思是,你不想從數組中刪除索引?如果是這樣,只需將該索引處的值設置爲空。 – JoshNaro 2009-10-29 13:59:14