2 回答

TA貢獻1806條經驗 獲得超5個贊
前面的答案很好,但只有當你的數組總是相同的大小時它才有效。
例如,有這個初始輸入會破壞代碼:
[
[{data:1},{data:2},{data:3}, {data:4}],
[{data:1},{data:2},{data:3}],
[{data:1},{data:2},{data:3}]
]
要解決這個問題,您可以在 reducer 中添加一個檢查,以確保下一個數組在該索引處有一個對象。
另一個問題是如果你有這個初始輸入:
[
[{data:1},{data:2},{data:3}, {data:4}],
[{data:1},{data:2},{data:3}, {data:4}, {data:5}],
[{data:1},{data:2},{data:3}]
]
第二個數組中的最后一個對象將被忽略,因為初始 reducer 只考慮length第一個數組的。
要處理這些異常,您可以使用此重構代碼(基于@mickl 答案):
// Initial input with different format
const initialInput = [
[{data:1},{data:2},{data:3}, {data:4}],
[{data:1},{data:2},{data:3}, {data:4}, {data:5}],
[{data:1},{data:2},{data:3}]
];
// Sort and reverse to get the array with most items first
const sortedInput = initialInput.sort().reverse();
// Finally use the refactored reducer
const result = sortedInput.reduce((arr,cur) => {
return arr.map((val, i) => {
// This "if" checks if the next array has an item on the same index of previous array
// Which is not the case, for example, from the second to the third item
if (cur[i] && cur[i].data) {
return { data: val.data + cur[i].data }
} else {
return { data: val.data}
}
})
});
console.log(result)

TA貢獻1794條經驗 獲得超8個贊
您可以使用array.reduce
跨多個數組聚合數據array.map
并對值求和,因為它采用箭頭函數,其中第二個參數表示當前處理元素的索引:
let input = [
[{data:1},{data:2},{data:3}],
[{data:1},{data:2},{data:3}],
[{data:1},{data:2},{data:3}]
];
let result = input.reduce((arr,cur) =>
arr.map((val, i) => ({ data: val.data + cur[i].data })));
console.log(result);
添加回答
舉報