Come si disinserisce un elemento in un array in javascript?


138

Come rimuovo la chiave "bar" da un array di foo in modo che "bar" non venga visualizzato

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

Risposte:


243

Non usare elimina poiché non rimuoverà un elemento da un array ma lo imposterà solo come indefinito, che non si rifletterà correttamente nella lunghezza dell'array.

Se conosci la chiave dovresti usare splice ie

myArray.splice(key, 1);

Per qualcuno nella posizione di Steven puoi provare qualcosa del genere:

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

o

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

3
+1 Bene, mi piace anche così: ejohn.org/blog/javascript-array-remove
CMS,

3
@ThiefMaster - Ti interessa spiegare? Non so cosa significhi e non vedo l'ora di imparare. Come sempre, una modifica è 1.000.000 volte migliore di un commento fuori mano; dovresti sapere che con la quantità di rappresentante che hai.
andare

21
Usa for (var key in myArray)invece di for (key in myArray)- altrimenti keyè una variabile globale e se chiami una funzione all'interno di quel ciclo che ha lo stesso problema, otterrai risultati imprevisti.
ThiefMaster il

2
Nota, il secondo esempio non funziona se l'array ha più elementi in una riga che corrispondono a "barra". L'indice dell'array si sposterà e perderai la giunzione della metà degli oggetti. Utilizzare invece un ciclo for che decrementa l'indice quando viene trovata una corrispondenza.
Dave Lancea,


52
delete foo[key];

: D


4
tecnicamente questo non risponde alla domanda. sta cercando di rimuovere la chiave "barra". e la tua variabile chiave non implica questo. : P
Kon

4
key = 'bar'; eval ("elimina foo." + tasto); si nasconde ; D
olliej,

3
Da NON usare eval. L'eliminazione di una chiave / indice di un oggetto / matrice può essere ottenuta con metodi molto più semplici che non utilizzano eval.
Dinei,

4
In realtà, se si rimuove dall'array indicizzato eliminando foo [chiave], il valore verrà archiviato in foo [chiave] = indefinito e foo.length rimarrà lo stesso che è sbagliato. Quindi usa SPLICE invece
Павел Иванов

usa delete foo [key] sbagliato; dovrebbe usare foo.splice (chiave, 1);
vnguyen

38

Una nota importante: gli array JavaScript non sono array associativi come quelli a cui potresti essere abituato da PHP. Se la "chiave dell'array" è una stringa, non stai più operando sul contenuto di un array. Il tuo array è un oggetto e stai usando la notazione parentesi per accedere al membro chiamato <nome chiave>. Così:

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

poiché non hai aggiunto elementi all'array, hai modificato solo la barra e i membri foo di myArray.


37

Se conosci il nome della chiave, fai semplicemente così:

delete array['key_name']

2
Questo non è un array! È un oggetto (sì, questi sono chiamati array associativi in ​​JS, ma no, in realtà non lo sono, e questo metodo è dannoso se si lavora veramente con un array JS).
Wintercounter

3

Ecco come lo farei

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

1
Il metodo Array.prototype.indexOf () cerca un valore all'interno di un array, non una chiave. Quindi questo non funzionerà.
Nadav,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.