Comment annuler la définition d'un élément dans un tableau en javascript?

138

Comment supprimer la clé 'bar' d'un tableau foo pour que 'bar' n'apparaisse pas dans

for(key in foo){alert(key);}
Steven Noble
la source

Réponses:

243

N'utilisez pas delete car il ne supprimera pas un élément d'un tableau, il le définira uniquement comme indéfini, ce qui ne sera alors pas reflété correctement dans la longueur du tableau.

Si vous connaissez la clé, vous devez utiliser splice ie

myArray.splice(key, 1);

Pour quelqu'un dans la position de Steven, vous pouvez essayer quelque chose comme ceci:

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

ou

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}
Aller
la source
3
+1 Bon point, j'aime aussi cette façon: ejohn.org/blog/javascript-array-remove
CMS
3
@ThiefMaster - Voulez-vous expliquer? Je ne sais pas ce que cela signifie et je suis impatient d'apprendre. Comme toujours, une modification est un million de fois meilleur qu'un commentaire désinvolte; vous devez savoir qu'avec le nombre de représentants que vous avez.
aller
21
Utiliser à la for (var key in myArray)place de for (key in myArray)- sinon keyc'est une variable globale et si vous appelez une fonction à l'intérieur de cette boucle qui a le même problème, vous obtiendrez des résultats inattendus.
ThiefMaster
2
Notez que le deuxième exemple ne fonctionne pas si le tableau a plusieurs éléments dans une ligne qui correspondent à «bar». L'index du tableau se déplacera et vous manquerez l'épissage de la moitié des éléments. À la place, utilisez une boucle for qui décrémente l'index lorsqu'une correspondance est trouvée.
Dave Lancea
Pour un tableau d'objets: stackoverflow.com/questions/15287865/…
Fedir RYKHTIK
52
delete foo[key];

:RÉ


la source
4
techniquement, cela ne répond pas à la question. il cherche à supprimer la clé «barre». et votre variable clé n'implique pas cela. : P
Kon
4
clé = 'bar'; eval ("supprimer foo." + touche); se cache ; D
olliej
3
Ne pas utiliser eval. La suppression d'une clé / index d'un objet / tableau peut être réalisée par des méthodes beaucoup plus simples n'utilisant pas eval.
Dinei le
4
En fait, si vous supprimez du tableau indexé en supprimant foo [clé], il stockera la valeur dans foo [clé] = undefined et foo.length restera le même, ce qui est faux. Alors, utilisez plutôt SPLICE
Павел Иванов
utilisez delete foo [key] mal; devrait utiliser foo.splice (clé, 1);
vnguyen
38

Remarque importante: les tableaux JavaScript ne sont pas des tableaux associatifs comme ceux auxquels vous pourriez être habitué depuis PHP. Si votre "clé de tableau" est une chaîne, vous n'opérez plus sur le contenu d'un tableau. Votre tableau est un objet et vous utilisez la notation entre crochets pour accéder au membre nommé <nom de clé>. Donc:

var myArray = [];
myArray ["bar"] = vrai;
myArray ["toto"] = vrai;
alert (myArray.length); // renvoie 0.

parce que vous n'avez pas ajouté d'éléments au tableau, vous n'avez modifié que les membres bar et foo de myArray.

John Factorial
la source
37

Si vous connaissez le nom de la clé, procédez comme suit:

delete array['key_name']
user3177525
la source
2
Ce n'est pas un tableau! C'est un objet (oui, on les appelle des tableaux associatifs dans JS, mais non, ils ne le sont pas vraiment, et cette méthode est nuisible si vous travaillez vraiment avec un tableau JS).
Wintercounter
3

C'est comme ça que je le ferais

 myArray.splice( myArray.indexOf('bar') , 1) 
stackoverflows
la source
1
La méthode Array.prototype.indexOf () recherche une valeur dans un tableau, pas une clé. Cela ne fonctionnera donc pas.
Nadav