2013-02-05 3 views
10

Der typische Weg, um eine Javascript Karte schaffen, ist die folgende:Wie füllt man eine Javascript-Map mit vielen statischen Schlüssel/Wert-Paaren effizient?

var map = new Object(); 
map[myKey1] = myObj1; 
map[myKey2] = myObj2; 

ich eine solche Karte erstellen müssen, wo beide Schlüssel und Werte Strings sind. Ich habe eine große aber statische Gruppe von Paaren, die der Karte hinzugefügt werden sollen.

Gibt es eine Möglichkeit etwas in Javascript auszuführen:

var map = { { "aaa", "rrr" }, { "bbb", "ppp" } ... }; 

oder muss ich so etwas wie dies ausführen müssen für jeden Eintrag:

map["aaa"]="rrr"; 
map["bbb"]="ppp"; 
... 

Grundsätzlich Javascript-Code verbleibenden schlingt über diese Karte und extrahiere Werte nach Kriterien, die zur Laufzeit bekannt sind. Wenn es für diesen Looping-Job eine bessere Datenstruktur gibt, interessiert mich das auch. Mein Ziel ist es, den Code zu minimieren.

+0

Haben Sie tatsächlich 'var map = {{" aaa "," rrr "}, {" bbb "," ppp "} ...};' wie Sie gefragt haben? Das funktioniert ganz gut, wenn Sie vor den Wert einen zusätzlichen Schlüssel setzen ... '{key: {" aaa "," rrr "}, key1: {" bbb "," ppp "}}' – Christoph

+0

mögliches Duplikat von [How Objekt-Eigenschaft aus Variablenwert in Javascript erstellen?] (http://stackoverflow.com/questions/2241875/how-to-create-object-property-from-variable-value-in-javascript) – jbabey

+2

@jbabey nicht wirklich ein Duplikate Ihrer vorgeschlagenen Frage, aber ich bin mir ziemlich sicher, dass dies schon einmal gefragt wurde;) – Christoph

Antwort

23

JavaScript Objekt Literalsyntax, die in der Regel Objekte verwendet wird zu instanziiert (ernsthaft, niemand nutzt new Object oder new Array), ist wie folgt:

var obj = { 
    'key': 'value', 
    'another key': 'another value', 
    anUnquotedKey: 'more value!' 
}; 

Für Arrays es ist:

var arr = [ 
    'value', 
    'another value', 
    'even more values' 
]; 

Wenn Sie brauchen Objekte in Objekten, das ist auch in Ordnung:

var obj = { 
    'subObject': { 
     'key': 'value' 
    }, 
    'another object': { 
     'some key': 'some value', 
     'another key': 'another value', 
     'an array': [ 'this', 'is', 'ok', 'as', 'well' ] 
    } 
} 

Diese bequeme Methode, statische Daten instanziieren zu können, führte zu der JSON data format.

JSON ist ein wenig pingelig, Schlüssel müssen, sowie String-Werte in doppelte Anführungszeichen eingeschlossen werden:

{"foo":"bar", "keyWithIntegerValue":123} 
4

Es funktioniert gut mit dem Objektliteral Notation:

var map = { key : { "aaa", "rrr" }, 
      key2: { "bbb", "ppp" } // trailing comma leads to syntax error in IE! 
      } 

Btw , der gemeinsame Weg Arrays

var array = []; 
// directly with values: 
var array = [ "val1", "val2", 3 /*numbers may be unquoted*/, 5, "val5" ]; 

instanziiert und Objekte

var object = {}; 

Auch können Sie entweder:

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 
1

Die Syntax, die Sie als erste schrieb nicht gültig ist. Sie können etwas mit dem Follow erreichen:

var map = {"aaa": "rrr", "bbb": "ppp" /* etc */ }; 
3

dieses Probieren Sie:

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

In ES2015 a.k.a ES6 Version von JavaScript, um einen neuen Datentyp namens Map eingeführt.

let map = new Map([["key1", "value1"], ["key2", "value2"]]); 
map.get("key1"); // => value1 

überprüfen Sie this reference für weitere Informationen.

Verwandte Themen