2016-07-04 4 views
2

Lets sagen, dass ich ein geparsten json wie unten angezeigt:Wie erstellt man eine Map mit eindeutigen Schlüsseln aus einem geparsten Objekt in Javascript es6/2015?

[{"a":1},{"a":2},{"a":3}]

Die Tasten sind die gleichen, die a ist.

Wie mache ich jedes a einzigartig, damit die Karte verwendbar ist?

EDIT1:

Ergebnisse Ich möchte:

let myMap = {}; //I declare my variable 
//Then I fetch a json and parse it 
fetch(link) 
    .then(function(response) { 
     return response.json(); //parse the json string 
    }).then(function(json) { 
     myMap = json; //set it to myMap to be used 
} 

Aus irgendeinem Grund, den ich doppelte Schlüssel mit, obwohl euch sagte der json einzigartig ist. Muss ich die JSON-Zeichenkette zuerst auf myMap setzen und dann nur analysieren?

+0

Wie soll wie die Ausgabe aussehen? – Rayon

+0

So etwas wie dieses '{{ id: 1, flight_location: "KUL", Beschreibung: "Kuala Lumpur" }, { id: 2, flight_location: "KIX", Beschreibung:„Osaka- Kansai " }}' –

+0

Ihre a ist bereits einzigartig, weil Sie einzigartige Werte innerhalb 1, 2, 3 haben oder sonst eine Objekt-ID erstellen und dynamische eindeutige ID für jedes Objekt verwenden –

Antwort

4

Grundsätzlich können Sie eine Object als Hash-Tabelle verwenden

var data = [{ "a": 1 }, { "a": 2 }, { "a": 3 }], 
 
    object = Object.create(null); 
 

 
data.forEach(function (el) { 
 
    object[el.a] = el; 
 
}); 
 

 
console.log(object);

Oder ein Map

var data = [{ "a": 1 }, { "a": 2 }, { "a": 3 }], 
 
    map = new Map; 
 

 
data.forEach(function (el) { 
 
    map.set(el.a, el); 
 
}); 
 

 
console.log(map.get(1));

Der Vorteil von Map über ein Objekt ist, der Schlüssel kann alles sein. Der Schlüssel wird nicht in eine Zeichenfolge konvertiert. Maps können ein Objekt oder andere primitive oder nicht-primitive Werte als Schlüssel haben.

0

Vielleicht das?

[{a:1},{a:2},{a:3}].map(function(item, index) { item.id = index; return item; }); 
+0

warum Karte ohne Rückkehr und Assingment/spätere Verwendung von Array? –

0

Karte in Javascript braucht keine eindeutige ID, es wird durch den ganzen Wert iterieren. so wird es durch alle Objekte iterieren ungeachtet der Tatsache, dass der Schlüssel gleiche

zB:

var kvArray = [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}] 
var reformattedArray = kvArray.map(function(obj){ 
var rObj = {}; 
    rObj[obj.key] = obj.value; 
    return rObj; 
}); 
0

Nun, [{a:1},{a:2},{a:3}] ist schon einzigartig ... aber, es ist ein Array. , so dass Sie nicht direkt auf ein Objekt {a:2, ...} zugreifen können, sondern Index mit Schleifen finden.

Wenn ich Ihre Frage richtig verstanden habe ... möchten Sie neue MAP mit eindeutigen Schlüssel a machen, wie wäre es auf diese Weise? - Reduzieren kann uns helfen. :)

BTW, Nina Scholz 'Antwort ist richtig.

let myMap = {}; //I declare my variable 
//Then I fetch a json and parse it 
fetch(link) 
    .then(function(response) { 
     return response.json(); //parse the json string 
    }).then(function(json) { 
     // myMap = json; //set it to myMap to be used 

     myMap = json.reduce(function(p, n) { p[n.a] = n; return p; }, {}); 
     // n.a or n['a'] - primary key (in sample, [1,2,3...]) 
     // "myMap[1].foo", "myMap[2].bar" 

     // or change KEY as your taste. 
     myMap = json.reduce(function(p, n) { p['k' + n.a] = n; return p; }, {}); 
     // "myMap.k1.foo", "myMap.k2.bar" 

     // It's unique but if you want everything... 
     myMap = json.reduce(function(p, n) { 
     var k = 'k' + n.a; 
     if(p[k] !== undefined) { p[k] = n; } 
     else if(Array.isArray(p[k])) { p[k].push(n); } 
     else { p[k] = [p[k]] ; } 
     return p; 
     }, {}); 
} 
0

Auch wenn Sie einen einzelnen Wert Liste haben oder wollen sicherstellen, dass es einzigartig ist der Index wie folgt geliefert verwenden können:

obj.map((item, index) => 
    ... 
)} 
Verwandte Themen