1 回答
TA贡献1825条经验 获得超4个赞
这样做的一种方法是遍历对象以获取行并将它们展平,然后reduce遍历数组以聚合它们,最后使用Object.values以获得正确的数据集。
const data = [{ key: 'key1', rows: [ ["A", "2018", "B", "1"], ["A", "2018", "C", "5"], ["A", "2018", "B", "4"], ["A", "2018", "C", "2"] ] }, { key: 'key1', rows: [ ["A", "2018", "B", "10"], ["A", "2018", "C", "50"], ["A", "2018", "B", "40"], ["A", "2018", "C", "20"]]}];
const key = data[0].key;
// Use `flatMap` to iterate over the object and merge the rows
const merged = data.flatMap(el => el.rows);
const rows = Object.values(merged.reduce((acc, c) => {
const [ k1, k2, k3, k4 ] = c;
acc[k3] = acc[k3] || [ k1, k2, k3, 0 ];
acc[k3][3] += +k4;
return acc;
}, {}));
console.log([{ key, rows }]);
注意:如果您需要将聚合数字返回到字符串,只需映射结果:
.map(([ a, b, c, d ]) => {
return [ a, b, c, d.toString() ];
});
添加回答
举报