var dict = []; // create an empty array
dict.push({
key: "keyName",
value: "the value"
});
// repeat this last part as needed to add more key/value pairs
Fondamentalement, vous créez un littéral d'objet avec 2 propriétés (appelées key
et value
) et vous l'insérez (en utilisant push()
) 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
et value
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:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
Ou utilisez la notation par points régulière pour définir les propriétés après avoir créé un objet:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
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:
var dict = {};
// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";
// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
Vous souhaitez également la notation des parenthèses si vos clés sont dynamiques:
dict[firstName + " " + lastName] = "some value";
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:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
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:
var objA = { a: 23 },
objB = { b: 42 };
dict[objA] = "value for objA";
dict[objB] = "value for objB";
console.log(dict);
// => { "[object Object]": "value for objB" }
En dépit objA
et objB
é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 le Date
prototype a une toString
méthode personnalisée qui remplace la représentation de chaîne par défaut. Et vous pouvez faire de même:
// a simple constructor with a toString prototypal method
function Foo() {
this.myRandomNumber = Math.random() * 1000 | 0;
}
Foo.prototype.toString = function () {
return "Foo instance #" + this.myRandomNumber;
};
dict[new Foo] = "some value";
console.log(dict);
// => {
// "Foo instance #712": "some value"
// }
(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 detoString
.)
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.