2017-02-16 2 views
2

にオブジェクトの配列の配列をマージ:オブジェクトの平らにし、ここに私の入力される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" } 
    ] 
]; 

すべての配列は、オブジェクトの同じ数を含むことが保証されています。

Iが出力に得たい:

、各内側アレイに​​ついて、N番目の要素を取得し、オブジェクトにマージし、その結果アレイに押し込みれる
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"} 
    ] 

Iは、第一のサブアレイ上に反復した後、他のアレイ上に反復される「脳死」溶液有する:

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); 
}); 

は、それが動作し、それは一種の恐ろしいであり、そしてIはたいmapやreduceのような機能的なメソッドを使って解決策があるかどうかを知る。

あなたは知っていますか?

答えて

6

内側配列の同じインデックスを持つデータのピボットには、Array#reduce,Array#forEachおよびObject.assignを使用できます。速いニーナた

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

。 – Pineda

+0

ええと、彼女はすぐに解決策を見つけ、それを洗練しました。ありがとうニーナ! – Gui13

関連する問題