2017-04-11 5 views
-1

Ich habe ein Array von Objekten, die von Server-Antwort kommt.Iterate durch Objektschlüssel und manipuliere die Schlüsselwerte

Array-Struktur:

[ 
    { 
    col1: ["a", "b"], 
    col2: ["c", "d"] 
    }, 

    { 
    col1: ["e", "f"], 
    col2: ["g", "h"] 
    } 
] 

I das gewünschte Ausgangs-Array in dieser Form sein will:

[ 
    { 
    col1: "b", 
    col2: "d" 
    }, 

    { 
    col1: "f", 
    col2: "h" 
    } 
] 

Grundsätzlich mag ich den Objektschlüssel-Wert konvertieren, die zunächst ein Array ist auf einen einzigen value und dieser Wert wird das zweite Element des Array Objektschlüssel sein.

Ich bin in der Lage, die Konvertierung durch Konvertierung von Object Keys-Array in Komma getrennte Zeichenfolge mit toString(), dann tun Sie tun, aber ich bin nicht in der Lage, durch die Objektschlüssel durchlaufen.

Würden die Eingaben in ES6 bevorzugen Karte mit für Iteration

+1

Dies kann mit einfachen Schleifen erreicht werden kann, Haben Sie etwas versucht? – Satpal

+1

Mögliches Duplikat von [Wie durchlaufe ich ein JavaScript-Objekt oder listet es auf?] (Http://stackoverflow.com/questions/684672/how-do-i-loop-through-o-en-umerate-a-javascript-object) – Arg0n

+0

Ich benutze es6, mit Karte für das Schleifen. Ich habe eine Doppelkarte ausprobiert, zähle aber nicht in optimierter Weise. –

Antwort

0

Sie Array#map, Object.assign und spread syntax ... mit einer inneren Zuordnung eines neuen Objekts eine Kombination mit dem gesuchten Schlüssel/Wert verwenden könnte.

var data = [{ col1: ["a", "b"], col2: ["c", "d"] }, { col1: ["e", "f"], col2: ["g", "h"] }], 
 
    result = data.map(o => Object.assign({}, ...Object.keys(o).map(k => ({ [k]: o[k][1] })))); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

Der folgende Code sollte nach Ihrer Spezifikation arbeiten.

var arr = [ {col1: ["a","b"], col2: ["c","d"] }, {col1: ["e","f"], col2: ["g","h"] } ] 
 

 

 
// [ {col1: "b" , col2: "d" }, {col1: "f", col2: "h" } ] 
 

 
arr2 = []; 
 

 
arr.forEach(e => { 
 
    let currObj = {}; 
 
    Object.keys(e).forEach(f => { 
 
    currObj[f] = e[f][1] 
 
    }) 
 
    arr2.push(currObj) 
 
}) 
 

 
console.log(arr2);

+0

Schlüsselnamen sind variabel, nicht fest, da sie von der Serverantwort stammen. –

+1

Mein Code aktualisiert, sollte jetzt funktionieren. –

+0

Funktioniert gut. Mach weiter ! –

0

Mögliche Lösung Array#reduce und Object.keys verwenden.

var arr = [ {col1: ["a","b"], col2: ["c","d"] }, {col1: ["e","f"], col2: ["g","h"] } ], 
 
    res = arr.reduce(function(s,a) { 
 
     var obj = {}; 
 
     Object.keys(a).map(function(c) { 
 
     obj[c] = a[c][1]; 
 
     }) 
 
     s.push(obj); 
 
     return s; 
 
    }, []); 
 
    
 
    console.log(res);

+0

Danke. Das ist, was ich gesucht habe. Klappt wunderbar. –

0

var data = [ {col1: ["a","b"], col2: ["c","d"] }, {col1: ["e","f"], col2: ["g","h"] } ]; 
 
var res=[]; 
 
var d = data.reduce(function(all,item){ 
 
    res.push({col1:item.col1[1],col2:item.col2[1]}); 
 
    return all; 
 
},{}); 
 

 
console.log(res);