2017-02-16 1 views
2

Hier meine Eingabe ist:Flatten und verschmelzen Array von Array von Objekten in Javascript

var toto=[ 
    [ 
     { "a": "24" }, 
     { "a": "23.9"}, 
     { "a": "NaN"}, 
     { "a": "3" } 
    ], 
    [ 
     {"b": "19"}, 
     {"b": "20"}, 
     {"b": "NaN"}, 
     {"b": "3" } 
    ], 
    [ 
     {"c": "27"}, 
     {"c": "28"}, 
     {"c": "NaN"}, 
     {"c": "3" } 
    ] 
]; 

Alle Arrays von Objekten gewährleistet werden, um die gleiche Anzahl von Objekten enthalten.

Ich möchte in Ausgabe erhalten:

var out = [ 
     { "a": "24", "b": "19", "c":"27" }, 
     { "a": "23.9", "b": "20", "c":"28"}, 
     { "a": "NaN", "b": "NaN", "c":"NaN"}, 
     { "a": "3", "b": "3", "c": "3"} 
    ] 

Welches ist, für jede innere Anordnung nimmt das n-te Element und Zusammenführen in ein Objekt, und schieben sie in einen Ergebnis-Array.

Ich habe eine „hirntot“ Lösung, die auf der ersten Untergruppe iteriert und dann auf den anderen Arrays iterieren:

var out = []; 
$(toto[0]).each(function(i, item) { 
    var o = {}; 
    $(toto).each(function(j, array) { 
    var item = array[i]; 
    o[Object.keys(item)[0]] = Object.values(item)[0]; 
    }); 
    out.push(o); 
}); 

Es funktioniert, aber es ist eine Art scheußlich, und ich möchte wissen Sie, ob es eine Lösung mit funktionalen Methoden wie map und reduce gibt.

Wissen Sie das?

Antwort

6

Sie könnten Array#reduce, Array#forEach und Object.assign für einen Drehpunkt der Daten mit demselben Index für das innere Array verwenden.

var toto=[[{ a: "24" }, { a: "23.9" }, { a: "NaN" }, { a: "3" }], [{ b: "19" }, { b: "20" }, { b: "NaN" }, { b: "3" }], [{ c: "27" }, { c: "28" }, { c: "NaN" }, { c: "3" }]], 
 
    result = toto.reduce(function (r, a) { 
 
     a.forEach(function (b, i) { 
 
      r[i] = r[i] || {}; 
 
      Object.assign(r[i], b); 
 
     }); 
 
     return r; 
 
    }, []); 
 

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

+0

, die schnell Nina war. – Pineda

+0

Ja, und sie hatte sofort eine Lösung und verfeinert sie. Danke Nina! – Gui13

Verwandte Themen