Jak usunąć element w tablicy w javascript?


138

Jak usunąć klawisz „bar” z tablicy foo, aby „bar” nie pojawiał się w

for(key in foo){alert(key);}

Odpowiedzi:


243

Nie używaj funkcji delete, ponieważ nie usunie to elementu z tablicy, ustawi go tylko jako niezdefiniowany, co nie zostanie wtedy poprawnie odzwierciedlone w długości tablicy.

Jeśli znasz klucz, powinieneś użyć splotu tj

myArray.splice(key, 1);

Dla kogoś na pozycji Stevena możesz spróbować czegoś takiego:

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}

lub

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}

3
CMS

3
@ThiefMaster - Chcesz wyjaśnić? Nie wiem, co to znaczy i chętnie się tego uczę. Jak zawsze, zmiana jest 1 000 000 razy lepsza niż komentarz z własnej ręki; powinieneś to wiedzieć przy ilości powtórzeń, które masz.
będzie

21
Użyj for (var key in myArray)zamiast for (key in myArray)- w przeciwnym razie keyjest zmienną globalną i jeśli wywołasz funkcję wewnątrz tej pętli, która ma ten sam problem, otrzymasz nieoczekiwane wyniki.
ThiefMaster

2
Uwaga, drugi przykład nie działa, jeśli tablica zawiera wiele elementów w wierszu, które pasują do słowa „bar”. Indeks tablicy się przesunie, a połowę elementów zostanie pominiętych. Zamiast tego użyj pętli for, która zmniejsza indeks po znalezieniu dopasowania.
Dave Lancea


52
delete foo[key];

:RE


4
technicznie to nie odpowiada na pytanie. on chce usunąć klucz „bar”. a twoja kluczowa zmienna tego nie sugeruje. : P
Kon,

4
key = 'bar'; eval ("usuń foo." + klawisz); ukrywa ; D
olliej

3
Czy nie używać eval. Usunięcie klucza / indeksu obiektu / tablicy można osiągnąć znacznie prostszymi metodami, które nie są używane eval.
Dinei

4
Właściwie, jeśli usuniesz z tablicy indeksowanej przez delete foo [klucz], zapisze wartość w foo [klucz] = undefined, a foo.length pozostanie taka sama, co jest błędne. Więc zamiast tego użyj SPLICE
Павел Иванов

użyj delete foo [klawisz] to źle; należy użyć foo.splice (key, 1);
vnguyen

38

Ważna uwaga: tablice JavaScript nie są tablicami asocjacyjnymi, jak te, do których możesz być przyzwyczajony w PHP. Jeśli twój „klucz tablicy” jest łańcuchem, nie wykonujesz już operacji na zawartości tablicy. Twoja tablica jest obiektem i używasz notacji nawiasów, aby uzyskać dostęp do elementu członkowskiego o nazwie <nazwa klucza>. A zatem:

var myArray = [];
myArray ["bar"] = true;
myArray ["foo"] = true;
alert (myArray.length); // zwraca 0.

ponieważ nie dodałeś elementów do tablicy, zmodyfikowałeś tylko elementy bar i foo myArray.


37

Jeśli znasz nazwę klucza, zrób tak:

delete array['key_name']

2
To nie jest tablica! To obiekt (tak, w JS nazywane są one tablicami asocjacyjnymi, ale nie, tak naprawdę nie są, a ta metoda jest szkodliwa, jeśli naprawdę pracujesz z tablicą JS).
licznik zimowy

3

Tak bym to zrobił

 myArray.splice( myArray.indexOf('bar') , 1) 

1
Metoda Array.prototype.indexOf () szuka wartości w tablicy, a nie klucza. Więc to nie zadziała.
Nadav

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.