De la poste:
Envoi d'un tableau JSON à recevoir en tant que dictionnaire <chaîne, chaîne>
J'essaie de faire la même chose que ce post. Le seul problème est que je ne sais pas quelles sont les clés et les valeurs initiales. J'ai donc besoin de pouvoir ajouter dynamiquement les paires clé / valeur et je ne sais pas comment faire.
Quelqu'un sait-il comment créer cet objet et ajouter dynamiquement des paires valeur / clé?
J'ai essayé:
var vars = [{key:"key", value:"value"}];
vars[0].key = "newkey";
vars[0].value = "newvalue";
Mais ça ne marche pas.
javascript
dictionary
key-value
KenEucker
la source
la source
list = [["key1","value1"],["key2","value2"]]
. Certaines autres langues ont un type "paire" ou "tuple". tldr pour dict réel ajoutant:dict['key'] = "value"
Réponses:
Fondamentalement, vous créez un littéral d'objet avec 2 propriétés (appelées
key
etvalue
) et vous l'insérez (en utilisantpush()
) dans le tableau.Edit: Donc, près de 5 ans plus tard, cette réponse obtient des votes négatifs car elle ne crée pas un littéral d'objet JS "normal" (alias carte, alias hachage, alias dictionnaire).
Il est cependant de créer la structure qui a demandé OP (et qui est illustrée dans l'autre question liée à), qui est un tableau de littéraux d'objets , chacun avec
key
etvalue
propriétés. Ne me demandez pas pourquoi cette structure était nécessaire, mais c'est celle qui a été demandée.Mais, mais, si ce que vous voulez dans un objet JS simple - et non la structure demandée par OP - voir la réponse de tcll , bien que la notation entre crochets soit un peu lourde si vous n'avez que des clés simples qui sont des noms JS valides. Vous pouvez simplement faire ceci:
Ou utilisez la notation par points régulière pour définir les propriétés après avoir créé un objet:
Vous ne voulez que la notation de support si vous avez des clés qui ont des espaces en eux, des caractères spéciaux, ou des choses comme ça. Par exemple:
Vous souhaitez également la notation des parenthèses si vos clés sont dynamiques:
Notez que les clés (noms de propriété) sont toujours des chaînes et que les valeurs non-chaîne seront contraintes à une chaîne lorsqu'elles seront utilisées comme clé. Par exemple, un
Date
objet est converti en sa représentation sous forme de chaîne:Notez cependant que cela ne fonctionne pas nécessairement "simplement", car de nombreux objets auront une représentation sous forme de chaîne comme celle
"[object Object]"
qui ne donne pas une clé non unique. Méfiez-vous donc de quelque chose comme:En dépit
objA
etobjB
étant des éléments complètement différents et uniques, ils ont tous deux la même représentation de chaîne de base:"[object Object]"
.La raison
Date
ne se comporte pas comme ceci est que leDate
prototype a unetoString
méthode personnalisée qui remplace la représentation de chaîne par défaut. Et vous pouvez faire de même:(Notez que comme ce qui précède utilise un nombre aléatoire , les collisions de noms peuvent toujours se produire très facilement. C'est juste pour illustrer une implémentation de
toString
.)Ainsi, lorsque vous essayez d'utiliser des objets comme clés, JS utilise la propre
toString
implémentation de l'objet , le cas échéant, ou utilise la représentation de chaîne par défaut.la source
dict
n'est pas un dictionnaire associatif. C'est un tableau d'objets, chacun étant un peu comme un dictionnaire avec deux clés: "clé" et "valeur".fonctionne comme python :)
sortie console:
la source
{}
plutôt qu'avec des parenthèsesC'est aussi simple que:
ou
puis
la source
Puisque vous avez déclaré que vous vouliez un objet dictionnaire (et non un tableau comme je suppose que certains l'ont compris), je pense que c'est ce que vous recherchez:
la source
JavaScript
Object
est en soi comme un dictionnaire. Pas besoin de réinventer la roue.Violon
la source
Vous pouvez utiliser des cartes avec
Map
, comme ceci:la source
Je suis tombé sur cette question à la recherche de quelque chose de similaire. Cela m'a donné suffisamment d'informations pour effectuer un test afin d'obtenir la réponse que je voulais. Donc, si quelqu'un d'autre veut savoir comment ajouter ou rechercher dynamiquement une paire {key: 'value'} dans un objet JavaScript, ce test devrait vous dire tout ce que vous pourriez avoir besoin de savoir.
production
la source
la source
key1 = dictionary.key1
plutôt qu'indexerkey1 = dictionary["key1"]
Vous pouvez créer un dictionnaire de classe pour pouvoir interagir facilement avec la liste des dictionnaires:
la source
que diriez-vous du liner pour créer une paire de valeurs clés?
et une fonction d'itérateur comme
reduce
convertir dynamiquement un tableau en dictionnairela source
Dans le javascript moderne (ES6 / ES2015), il faut utiliser la structure de données Map pour le dictionnaire. La structure des données de carte dans ES6 vous permet d'utiliser des valeurs arbitraires comme clés.
Si vous utilisez toujours ES5, la façon correcte de créer un dictionnaire consiste à créer un objet sans prototype de la manière suivante.
Il existe de nombreux avantages à créer un dictionnaire sans objet prototype. Les blogs ci-dessous méritent d'être lus sur ce sujet.
dict-pattern
objets en tant que cartes
la source
Cela aiderait une tonne de savoir quel est votre résultat final souhaité, mais je pense que c'est ce que vous voulez:
la source
J'ai rencontré ce problème .. mais dans une boucle for. La solution supérieure ne fonctionnait pas (lors de l'utilisation de variables (et non de chaînes) pour les paramètres de la fonction push), et les autres ne tenaient pas compte des valeurs clés basées sur des variables. J'ai été surpris que cette approche (qui est courante en php) fonctionne ..
la source
Une amélioration
var dict = {}
consiste à utiliservar dict = Object.create(null)
.Cela va créer un objet vide qui ne pas avoir
Object.prototype
comme prototype de lui.la source
la source