La manière typique de créer un objet Javascript est la suivante:
var map = new Object();
map[myKey1] = myObj1;
map[myKey2] = myObj2;
J'ai besoin de créer une telle carte où les clés et les valeurs sont des chaînes. J'ai un ensemble de paires large mais statique à ajouter à la carte.
Existe-t-il un moyen d'effectuer quelque chose comme ça en Javascript:
var map = { { "aaa", "rrr" }, { "bbb", "ppp" } ... };
ou dois-je effectuer quelque chose comme ceci pour chaque entrée:
map["aaa"]="rrr";
map["bbb"]="ppp";
...
Fondamentalement, le code Javascript restant passera en boucle sur cette carte et extraira des valeurs selon des critères connus "à l'exécution". S'il existe une meilleure structure de données pour ce travail en boucle, je suis également intéressé. Mon objectif est de minimiser le code.
La syntaxe littérale des objets JavaScript, qui est généralement utilisée pour instancier des objets (sérieusement, personne n'utilise new Object
ou new Array
), est comme suit:
var obj = {
'key': 'value',
'another key': 'another value',
anUnquotedKey: 'more value!'
};
Pour les tableaux, c'est:
var arr = [
'value',
'another value',
'even more values'
];
Si vous avez besoin d'objets dans des objets, c'est bien aussi:
var obj = {
'subObject': {
'key': 'value'
},
'another object': {
'some key': 'some value',
'another key': 'another value',
'an array': [ 'this', 'is', 'ok', 'as', 'well' ]
}
}
C'est cette méthode pratique pour pouvoir instancier des données statiques qui a conduit au format de données JSON .
JSON est un peu plus pointilleux, les clés doivent être mises entre guillemets, ainsi que les valeurs de chaîne:
{"foo":"bar", "keyWithIntegerValue":123}
Dans ES2015 a.k.a ES6 version de JavaScript, un nouveau type de données appelé Map
est introduit.
let map = new Map([["key1", "value1"], ["key2", "value2"]]);
map.get("key1"); // => value1
vérifier cette référence pour plus d'informations.
Cela fonctionne très bien avec la notation littérale de l'objet:
var map = { key : { "aaa", "rrr" },
key2: { "bbb", "ppp" } // trailing comma leads to syntax error in IE!
}
BTW, la manière courante d'instancier des tableaux
var array = [];
// directly with values:
var array = [ "val1", "val2", 3 /*numbers may be unquoted*/, 5, "val5" ];
et objets
var object = {};
Vous pouvez également faire soit:
obj.property // this is prefered but you can also do
obj["property"] // this is the way to go when you have the keyname stored in a var
var key = "property";
obj[key] // is the same like obj.property
Essayez ceci:
var map = {"aaa": "rrr", "bbb": "ppp"};
La syntaxe que vous avez écrite en premier n'est pas valide. Vous pouvez réaliser quelque chose en utilisant ce qui suit:
var map = {"aaa": "rrr", "bbb": "ppp" /* etc */ };