2009-10-28 10 views
6

Muszę usunąć niektóre elementy z mojej tablicy, ale bez tablicy zmiany układu.Najlepszy sposób na usunięcie elementu z tablicy bez zmiany jej rozmieszczenia

Jeśli użyję "Usuń", aby usunąć moje elementy, "dziury" zajmują pamięć?

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

Myślę, że usunięty element jest naprawdę usunięty, więc nie zajmuje miejsca w pamięci, czy nie jest prawdą?

Odpowiedz

4

Zależy całkowicie od wdrożenia. Wewnętrznie wszystkie reprezentacje JS ostatecznie przekształcą się w rzadką reprezentację, ale reprezentacja zapasowa ma tendencję do korzystania z większej ilości pamięci na element i wolniej jest uzyskiwać dostęp do niej niż nierozdzielnej macierzy.

Z tego powodu usunięcie jednej wartości z gęstej tablicy prawdopodobnie nie zwalnia żadnej pamięci, ale po usunięciu wystarczającej liczby elementów implementacja najprawdopodobniej przekształci się w rzadką reprezentację, aby ogólnie zaoszczędzić pamięć.

Uwaga: obiekt lub wartość z usuniętego indeksu nie zostanie natychmiast usunięty - usuwanie po prostu usuwa szczelinę właściwości z obiektu - obiekt/wartość zostanie usunięty tylko podczas przejścia GC i tylko jeśli nie ma innych odniesień.

3

Możesz użyć array.splice(1, 1); Spowoduje to usunięcie jednego wpisu w indeksie 1. Pierwszym parametrem jest indeks, a drugi to liczba.

+1

bez TYLKO PONOWNEGO, więc splice to nie to, czego szukam. – blow

9

Spróbuj użyć,

array.splice(index, 1); 

Zobacz Mastering JavaScript Arrays.

+0

bez TYLKO PONOWNEGO, więc splice to nie to, czego szukam. – blow

+3

Tablica nie jest uporządkowana za pomocą splotu, indeks jest całkowicie usunięty. Czy chcesz powiedzieć, że nie chcesz usuwać indeksu z tablicy? Jeśli tak, ustaw wartość tego indeksu na wartość null. – JoshNaro

Powiązane problemy