web-dev-qa-db-fra.com

Comment remplir efficacement un littéral d'objet Javascript avec de nombreuses paires clé / valeur statiques?

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.

23
Jérôme Verstrynge

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}
35
zzzzBov

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.

60
Nitin

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
5
Christoph

Essayez ceci:

var map = {"aaa": "rrr", "bbb": "ppp"};
2
MKS

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 */ };
0
ZER0