You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数组垂直求和逻辑从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]

边界情况补充(可选)

如果你的多维数组可能为空,或者子数组长度不一致,可以做一些适配:

  1. 处理空数组:给reduce加一个初始空数组作为累加器,再结合Math.max获取最长子数组长度补0
  2. 子数组长度不一致:在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:03:57