首页 > 解决方案 > 在ES6中使用单个公共键合并X个对象数组的数组

问题描述

所以我在数组中有多个对象,它们遵循类似于以下的模式。

所有对象数组的长度始终相同。yX(每个对象数组中甚至可以有 100 个 yX(es) 和 100 个 xy 对。yX 是不同的,但总是从 0 开始并以 1 递增(y0, y1, y2, y3, y4, .. .)。

const data = [
[{x: 0, y0: 1}, {x: 1, y0: 2}, {x: 2, y0: 3}],
[{x: 0, y1: 2}, {x: 1, y1: 3}, {x: 2, y1: 5}],
[{x: 0, y2: 1}, {x: 1, y2: 2}, {x: 2, y2: 3}]
]

如何轻松合并它们,以便获得这样的结果?

const newData = [
{x: 0, y0: 1, y1: 2, y0: 1},
{x: 1, y0: 2, y1: 3, y2: 2},
{x: 2: y0: 3, y1: 5, y2: 3}
]

可能有一些我找不到的简单解决方案,但是我迷失了所有不同的forEach, .map,Object.assign()等组合。

标签: javascriptarraysecmascript-6

解决方案


您可以合并数组并获取同一索引的所有属性。

const
    data = [
        [{ x: 0, y0: 1 }, { x: 1, y0: 2 }, { x: 2, y0: 3 }],
        [{ x: 0, y1: 2 }, { x: 1, y1: 3 }, { x: 2, y1: 5 }],
        [{ x: 0, y2: 1 }, { x: 1, y2: 2 }, { x: 2, y2: 3 }]
    ],
    result = data.reduce((r, a) => a.map((o, i) => ({ ...r[i], ...o })), []);

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


推荐阅读