忽然笑
前面的答案很好,但只有当你的数组总是相同的大小时它才有效。例如,有这个初始输入会破坏代码:[ [{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 formatconst 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 firstconst sortedInput = initialInput.sort().reverse();// Finally use the refactored reducerconst 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)
幕布斯7119047
您可以使用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);