Supposons que j'ai ce code:
var myArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;
Maintenant, si je voulais supprimer "nom"? .... y a-t-il un équivalent de
myArray["lastname"].remove()
?
(J'ai besoin que l'élément disparaisse parce que le nombre d'éléments est important et je veux garder les choses propres.)
"Test" + {};
est une instruction JS parfaitement valide.Réponses:
Les objets en JavaScript peuvent être considérés comme des tableaux associatifs, mappant des clés (propriétés) à des valeurs.
Pour supprimer une propriété d'un objet en JavaScript, vous utilisez l'
delete
opérateur:Notez que lorsqu'il
delete
est appliqué à une propriété d'index d'unArray
, vous créerez un tableau peu peuplé (c'est-à-dire un tableau avec un index manquant).Lorsque vous travaillez avec des instances de
Array
, si vous ne souhaitez pas créer un tableau peu peuplé - et ce n'est généralement pas le cas -, vous devez utiliserArray#splice
ouArray#pop
.Notez que l'
delete
opérateur en JavaScript ne libère pas directement la mémoire. Son but est de supprimer les propriétés des objets. Bien sûr, si une propriété en cours de suppression contient la seule référence restante à un objeto
, elleo
sera par la suite récupérée de manière normale.L'utilisation de l'
delete
opérateur peut affecter la capacité des moteurs JavaScript à optimiser le code .la source
delete myArray[0]
. Voir stackoverflow.com/a/9973592/426379 et Suppression d'éléments de tableaulength
propriété d'un objet Array reste inchangée.myArray
était vraiment utilisé comme un tableau - mais ce n'est pas le cas (myArray
c'est un nom malheureux), c'est un objet. Donc, dans ce cas,delete
c'est OK. Notez que même s'il était créé en tantnew Array()
que tableau associatif et utilisé, il serait toujours correct. Votre avertissement est toujours quelque chose à savoir si l'on utilise de vrais tableaux.Tous les objets en JavaScript sont implémentés en tant que tables de hachage / tableaux associatifs. Donc, ce qui suit est l'équivalent:
Et, comme déjà indiqué, vous "supprimez" une propriété d'un objet via le
delete
mot - clé, que vous pouvez utiliser de deux manières:J'espère que les informations supplémentaires vous aideront ...
la source
myObj['some;property']
fonctionne, maismyObj.some;property
ne serait pas (pour des raisons évidentes). De plus, il peut ne pas être évident que vous pouvez utiliser une variable dans la notation des crochets, c'estvar x = 'SomeProperty'; alert(myObj[x])
Aucune des réponses précédentes ne traite du fait que Javascript n'a pas de tableaux associatifs pour commencer - il n'y a pas de
array
type en tant que tel, voirtypeof
.Ce que Javascript a, ce sont des instances d'objets avec des propriétés dynamiques. Lorsque les propriétés sont confondues avec des éléments d'une instance d'objet Array, alors Bad Things ™ est susceptible de se produire:
Problème
Solution
Pour avoir une fonction de suppression universelle qui ne vous explose pas, utilisez:
la source
Array
s dans JS sont des objets, essayeztypeof new Array();
outypeof []
pour vérifier.Array
est simplement un certain type d'objet et pas du tout une "bête différente". Dans JS, les objets se distinguent par leur nom de constructeur et leur chaîne de prototypes, voir Programmation basée sur des prototypes .delete
opérateur de carence en ce qui concerneArray
en fournissant une fonction polymorphe simple.delete
n'a pas de carence.delete
est conçu pour supprimer les propriétés. C'est ça. L'application de l'opérateur de suppression à un index d'un tableau supprime cet index. Que faut-il de plus? Vous vous retrouvez avec un tableau clairsemé, qui est une caractéristique de la langue. Si vous ne voulez pas d'un tableau clairsemé, ne supprimez pas l'index: utilisezsplice
oupop
.Cela ne supprime que l'objet, mais conserve la même longueur de tableau.
Pour supprimer, vous devez faire quelque chose comme:
la source
Bien que la réponse acceptée soit correcte, il manque l'explication pourquoi cela fonctionne.
Tout d'abord, votre code doit refléter le fait qu'il ne s'agit PAS d' un tableau:
Notez que tous les objets (y compris
Array
s) peuvent être utilisés de cette façon. Cependant, ne vous attendez pas à ce que les fonctions de tableau JS standard (pop, push, ...) fonctionnent sur les objets!Comme indiqué dans la réponse acceptée, vous pouvez ensuite utiliser
delete
pour supprimer les entrées des objets:Vous devez décider de l'itinéraire que vous souhaitez emprunter - utilisez des objets (tableaux associatifs / dictionnaires) ou utilisez des tableaux (cartes). Ne mélangez jamais les deux.
la source
Utilisez la méthode
splice
pour supprimer complètement l'élément d'un tableau d'objets:la source
Comme d'autres réponses l'ont noté, ce que vous utilisez n'est pas un tableau Javascript, mais un objet Javascript, qui fonctionne presque comme un tableau associatif dans d'autres langues, sauf que toutes les clés sont converties en chaînes. La nouvelle carte stocke les clés comme leur type d'origine.
Si vous aviez un tableau et non un objet, vous pouvez utiliser la fonction .filter du tableau , pour renvoyer un nouveau tableau sans l'élément que vous souhaitez supprimer:
Si vous avez un navigateur plus ancien et jQuery, jQuery a une
$.grep
méthode qui fonctionne de la même manière:la source
Il existe une manière élégante dans Airbnb Style Guide de le faire (ES7):
Droit d'auteur: https://codeburst.io/use-es2015-object-rest-operator-to-omit-properties-38a3ecffe90
la source
Vous utilisez Object, vous n'avez pas de tableau associatif pour commencer. Avec un tableau associatif, l'ajout et la suppression d'éléments se fait comme suit:
la source
Vous pouvez supprimer une entrée de votre carte en l'affectant explicitement à «non défini». Comme dans votre cas:
la source
Si pour une raison quelconque, la touche de suppression ne fonctionne pas (comme si elle ne fonctionnait pas pour moi)
Vous pouvez l'épisser puis filtrer les valeurs indéfinies
N'essayez pas de les enchaîner car l'épissure renvoie les éléments supprimés;
la source
Nous pouvons également l'utiliser comme fonction. Angular génère une erreur s'il est utilisé comme prototype. Merci @HarpyWar. Cela m'a aidé à résoudre un problème.
la source
C'est très simple si vous avez une dépendance underscore.js dans votre projet -
la source
En utilisant le
"delete"
mot - clé, il supprimera l'élément de tableau du tableau en javascript.Par exemple,
Considérez les déclarations suivantes.
La dernière ligne du code supprimera l'élément du tableau dont la clé est "status" du tableau.
la source
Sans boucle / itération nous obtenons le même résultat
la source
Pour les "tableaux":
Si vous connaissez l'indice:
Si vous connaissez la valeur:
La réponse la plus appréciée pour
delete
fonctionne bien dans le cas d'objets mais pas pour les vrais tableaux. Si je l'utilise,delete
il supprime les éléments des boucles mais conserve l'élément au furempty
et à mesure que la longueur du tableau ne change pas. Cela peut être un problème dans certains scénarios.Par exemple, si je fais myArray.toString () sur myArray après la suppression via
delete
il crée une entrée vide, c'est-à-dire ,,la source
La seule méthode de travail pour moi:
usage:
la source