繁体   English   中英

展平并合并Javascript中的对象数组

[英]Flatten and merge array of array of objects 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" }
    ]
];

确保所有对象数组包含相同数量的对象。

我想获得输出:

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"}
    ]

对于每个内部数组,采用第N个元素并将其合并为一个对象,然后将其推入结果数组。

我有一个“ braindead”解决方案,它在第一个子数组上进行迭代,然后在其他数组上进行迭代:

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

它可以工作,但是有点可怕,我想知道是否存在使用map和reduce这样的功能方法的解决方案。

你们知道吗

您可以将Array#reduceArray#forEachObject.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; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM