81 votes

Comment supprimer la clé et la valeur d'un hash en javascript ?

Étant donné que

var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myHash['key2'] = { Name: 'Object 2' };
myHash['key3'] = { Name: 'Object 3' };

Comment puis-je supprimer key2 et object 2 du hachage, de sorte qu'il se retrouve dans un état comme si je l'avais fait :

var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myHash['key3'] = { Name: 'Object 3' };

supprimer ne fait pas ce que je veux ;

delete myHash['key2'] 

me donne simplement ceci :

var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myhash['key2'] = null;
myHash['key3'] = { Name: 'Object 3' };

les seuls documents que je peux trouver sur splice et slice traiter avec des indexeurs entiers, ce que je n'ai pas.

Edit : Je ne sais pas non plus si 'key2' est nécessairement en position [1].

UPDATE

OK, léger faux-fuyant, delete semble faire ce que je veux à première vue, mais j'utilise json2.js pour transformer mon objet en json et le renvoyer au serveur,

après que j'ai supprimé, monHash est sérialisé comme :

[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ]

Est-ce un bug dans json2.js ? ou est-ce que je fais quelque chose de mal avec delete ?

Merci

3 votes

Ce que vous faites, c'est ajouter des propriétés à un objet, ce qui est différent de l'ajout d'éléments à un tableau/hash. Vous cherchez un moyen de supprimer une propriété, plus ou moins. Essayez de supprimer myHash.key1, comme mentionné dans d'autres commentaires.

2 votes

Si c'est une table de hachage, vous devez utiliser var myHash = new Object() au lieu de var myHash = new Array() .

184voto

karim79 Points 178055

Vous êtes à la recherche de delete :

delete myhash['key2']

Voir le Guide de base du Javascript

1 votes

Je pensais que c'était correct, c'est pourquoi je l'ai essayé en premier lieu. Il fait semblent pour fonctionner, mon problème réside en fait dans Json.stringify, je vais mettre à jour la question.

8 votes

Utilisez plutôt la fonction splice. La suppression laisse un trou dans le tableau.

2 votes

Ici est la fonction d'épissage susmentionnée btw.

11voto

Eldar Djafarov Points 4597

Pourquoi utilisez-vous new Array(); pour le hachage ? Vous devez utiliser new Object() à la place.

Et je pense que vous obtiendrez ce que vous voulez.

4 votes

Je n'aime pas du tout new. Je préfère var myHash = [] ;

10 votes

Ou dans ce cas, myHash={} ; :-)

0 votes

Je suis d'accord. La seule chose qu'un tableau vous donne est une longueur qui ne fonctionne jamais lorsque vous changez l'indexeur autrement qu'en int.

6voto

Nosredna Points 33670

Vous dites que vous ne savez pas nécessairement que 'key2' est en position [1]. Eh bien, ce n'est pas le cas. La position 1 serait occupée par myHash[1].

Vous abusez des tableaux JavaScript, qui (comme les fonctions) autorisent les hachages clé/valeur. Même si JavaScript le permet, il ne vous donne pas les moyens de le gérer, comme le ferait un langage conçu pour les tableaux associatifs. Les méthodes de tableau de JavaScript ne fonctionnent qu'avec les propriétés numérotées.

La première chose à faire est de passer aux objets plutôt qu'aux tableaux. Vous n'avez pas de bonne raison d'utiliser un tableau plutôt qu'un objet, alors ne le faites pas. Si vous voulez utiliser un tableau, numérotez simplement les éléments et abandonnez l'idée de hachage. Le but d'un tableau est de contenir des informations qui peuvent être indexées numériquement.

Vous pouvez, bien sûr, placer un hachage (objet) dans un tableau si vous le souhaitez.

myhash[1]={"key1","brightOrangeMonkey"};

1voto

andres descalzo Points 8392

Une autre option peut être la suivante John Resig supprime la méthode . peut mieux répondre à vos besoins. si vous connaissez l'index dans le tableau.

2 votes

Le fait de ne pas avoir l'index est exactement ce que dit la question.

0 votes

Hey @AndrewBullock J'ai une requête qui me permet d'obtenir un tableau JSON Ex : [{\"Countrycode\":\"DE\",\"count\":\"3\"}] mais je veux obtenir [{"DE" : "3"}] comme ceci mais je n'obtiens pas ce résultat S'il te plaît aide-moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X