2009-10-28 12 views
6

Dizimin bazı öğelerini silmek zorundayım, ancak diziyi yeniden düzenlemeden.Yeniden düzenlemeden diziden öğeyi silmenin en iyi yolu

Öğelerimi silmek için "sil" kullanırsam, "delikler" bellek alır?

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

Silinen öğenin gerçekten silinmiş olduğunu düşünüyorum, bu nedenle bellek alanı kaplamıyor, değil mi?

cevap

4

Tamamen uygulamaya bağlı. Dahili olarak tüm JS temsilleri sonuçta seyrek bir temsile dönecektir, ancak sparese temsili eleman başına daha fazla bellek kullanma eğilimindedir ve seyrek olmayan diziden daha yavaş erişim sağlar.

Bu nedenle, yoğun bir diziden uzak kalmanın kaldırılması, herhangi bir belleğin serbest bırakılması olası değildir, ancak yeterli sayıda öğe kaldırıldıktan sonra, uygulama genel olarak belleği kurtarmak için seyrek bir sunuma dönüşecektir.

Not: Sildiğiniz dizindeki nesne veya değer hemen silinmez - silme özelliği yalnızca nesne yuvasından nesneyi kaldırır - nesne/değer yalnızca bir GC geçişi sırasında kaldırılır ve yalnızca başka referans yok.

3

array.splice(1, 1);'u kullanabilirsiniz. Bu, 1 dizinindeki bir girişi kaldıracaktır. Birinci parametre indeks, ikincisi ise sayıdır.

+1

REARRANGE olmadan, bu yüzden ekleme aradığım değil. REARRANGE olmadan – blow

9

deneyin kullanarak,

array.splice(index, 1); 

Mastering JavaScript Arrays bakınız.

+0

, bu yüzden ekleme aradığım değil. – blow

+3

Dizi, ekleme ile yeniden düzenlenmemiş, dizin tamamen kaldırılmıştır. Dizini dizinden kaldırmak istemediğinizi mi kastediyorsunuz? Öyleyse, bu dizindeki değeri null olarak ayarlayın. – JoshNaro

İlgili konular