如何将数组垂直求和逻辑从2个数组扩展到任意n个数组?
解决方案:多维数组垂直求和扩展到任意n个数组
嘿,你已经找对了两个数组对应元素求和的核心逻辑,只需要借助JavaScript的reduce方法,就能把这个逻辑轻松扩展到处理任意数量的子数组!
核心思路
reduce方法可以帮我们迭代多维数组中的每一个子数组,把它们依次和**累加器(acc)**做对应元素求和——这个累加器的初始值默认是第一个子数组,之后每一步都会更新为当前累加结果,直到所有子数组都参与计算。
完整代码实现
// 你的目标多维数组 const multiArray = [ [1,2,3], [4,5,6], [7,8,9], [2,4,6] ]; // 用reduce串联多个数组的求和逻辑 const verticalSum = multiArray.reduce((acc, currentArr) => { // 复用你原来的map逻辑,将累加器和当前子数组对应元素相加 return acc.map((num, index) => num + currentArr[index]); }); console.log(verticalSum); // 输出:[14, 19, 24]
代码工作流程拆解
我们一步步看这个逻辑怎么跑起来:
- 第一次迭代:
acc是第一个子数组[1,2,3],currentArr是[4,5,6],map后得到[5,7,9]作为新的累加器 - 第二次迭代:
acc更新为[5,7,9],currentArr是[7,8,9],相加后得到[12,15,18] - 第三次迭代:
acc更新为[12,15,18],currentArr是[2,4,6],最终得到[14,19,24]
边界情况补充(可选)
如果你的多维数组可能为空,或者子数组长度不一致,可以做一些适配:
- 处理空数组:给
reduce加一个初始空数组作为累加器,再结合Math.max获取最长子数组长度补0 - 子数组长度不一致:在map时判断
currentArr[index]是否存在,不存在则用0代替,比如:
const verticalSum = multiArray.reduce((acc, currentArr) => { const maxLength = Math.max(acc.length, currentArr.length); // 补全累加器或当前数组的长度到最大值,缺的位置补0 while(acc.length < maxLength) acc.push(0); while(currentArr.length < maxLength) currentArr.push(0); return acc.map((num, index) => num + currentArr[index]); }, []);
内容的提问来源于stack exchange,提问作者Luis felipe De jesus Munoz
相关产品推荐
相关产品推荐

