2016-08-29 4 views
0

Unten ist mein Code ....Wie man ein Array abbildet und daraus ein Objekt erstellt?

var temp = {}; 
[{group_id : "1111"}, {group_id: "2222"}].map(function(ele, index) { 
    var group_id = ele.group_id; 
    temp.group_id = {value: 0} 
}); 

Nach diesem Code ausführen, das temporäre Objekt ist

{group_id : {value : 0} 

Aber was ich will, ist

{ {"1111" : {value : 0}}, {"2222" : {value : 0}} } 

Wie kann ich das tun ?

+1

Sie können nicht. Das ist kein gültiges Objekt. Möchten Sie stattdessen ein Array erhalten? – str

+0

Wie auch immer, ich kann das Ergebnis bekommen? – Dreams

+0

'[{" 1111 ": {Wert: 0}}, {" 2222 ": {Wert: 0}}]' Könnten Sie erwarten –

Antwort

1

anstelle von temp.group_id verwenden Sie temp[group_id].

+0

keine Notwendigkeit, '.map' entweder zu verwenden, da das zurückgegebene Array sofort verworfen wird –

0

Aber was ich will, ist

{ {"1111" : {value : 0}}, {"2222" : {value : 0}} } 

Sie können ein Array verwenden, Objekte zu speichern, wenn die Ergebnisse

[ 
    { 
    "1111": { 
     "value": 0 
    } 
    }, 
    { 
    "2222": { 
     "value": 0 
    } 
    } 
] 

var obj = [{group_id : "1111"}, {group_id: "2222"}]; 
var res = obj.map(o => ({[o.group_id]:{value:0}})); 
0

Wie Ihr aktueller wäre bemerkt erwartetes Ergebnis t ist keine gültige JSON-Struktur.

Stattdessen schreibe ich meine Lösung basiert auf der Annahme, dass Ihr erwartete Ergebnis ist:
{ "1111" : {value : 0}, "2222" : {value : 0} } und da das Endergebnis ein Objekt ist, map mit nicht angemessen wäre, da es ein Array zurückgibt. Meine Lösung basiert also auf der reduce API.

function initObject(obj, currElement) { 
 
    obj[currElement.group_id] = { value: 0 }; 
 
    return obj; 
 
} 
 

 
console.log([{group_id : "1111"}, {group_id: "2222"}].reduce(initObject, {}));

0

Sie können die Fn verwenden reduzieren Sie Ihre Array zu reduzieren, um das Objekt. Da die Erwartung Ihrer Ausgabe keine gültige JSON ist, ist das Ergebnis einer gültigen JSON-Struktur, die erhalten werden kann, unten. Bitte ändern Sie Ihre Frage für eine gültige Ergebnismenge, wenn dies nicht der Fall ist.

var temp = [{group_id : "1111"}, {group_id: "2222"}].reduce(function(obj, key) { 
 
\t 
 
    obj[key.group_id] = {value: 0}; 
 
    return obj; 
 
    
 
} , {}); 
 
console.log(temp);

0

Ihre Map-Funktion ist in Ordnung, obwohl die Struktur des Objekts, das Sie erreichen wollen etwas falsch ist.

In einem Objekt existieren die Werte als Schlüssel-Wert-Paar, daher muss ein Schlüssel für das Objekt temp vorhanden sein. Oder Sie können alles als ein Array umschließen.

SO

var temp = {}; 
 
[{group_id : "1111"}, {group_id: "2222"}] 
 
.map(function(ele) { 
 
    var group_id = ele.group_id; 
 
    temp[group_id] = {value: 0} 
 
});
geben Ihnen temp als

{"1111":{value: 0}, "2222":{value: 0}} 

Und für Array, können Sie den Code gehen wie folgt vor:

var temp = []; 
 
[{group_id : "1111"}, {group_id: "2222"}] 
 
.map(function(ele) { 
 
    var obj = {}; 
 
    obj[ele.group_id] = {value: 0} 
 
    temp.push(obj) 
 
});

Dies wird Ihnen temp als

[{"1111":{value: 0}}, {"2222": {value: 0}}] 

Sie einen von ihnen verwenden können, sind beide gut, hängt allerdings ab, wie Sie wollen, verwenden temp später in Sie Code.

Verwandte Themen