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

JavaScript多维数组子数组求和问题求助(forEach/map/reduce实现)

嘿,别担心!我帮你搞定这个多维数组子数组求和的问题,先给你能得到预期结果sum = [8,13,22]的三种正确实现,再聊聊大家常踩的坑~

1. 用map + reduce实现(最直观简洁)

map可以遍历外层数组的每个子数组,然后用reduce对每个子数组求和,完美匹配你的需求:

const multiArr = [[1,2,5], [3,4,6], [7,8,7]]; // 替换成你实际的多维数组即可
const sum = multiArr.map(subArr => {
  // 给reduce设置初始值0,避免子数组为空或只有一个元素时出错
  return subArr.reduce((acc, curr) => acc + curr, 0);
});
console.log(sum); // 输出 [8,13,22]

2. 用forEach + reduce实现

如果想用forEach来遍历外层数组,需要先初始化一个空数组来存结果,然后把每个子数组的求和结果push进去:

const multiArr = [[1,2,5], [3,4,6], [7,8,7]];
const sum = [];
multiArr.forEach(subArr => {
  const subSum = subArr.reduce((acc, curr) => acc + curr, 0);
  sum.push(subSum);
});
console.log(sum); // 输出 [8,13,22]

3. 用嵌套reduce实现

如果你想用单个reduce完成整个操作,也可以这样写:

const multiArr = [[1,2,5], [3,4,6], [7,8,7]];
const sum = multiArr.reduce((resultArr, subArr) => {
  const subSum = subArr.reduce((acc, curr) => acc + curr, 0);
  resultArr.push(subSum);
  return resultArr;
}, []); // 外层reduce的初始值是空数组
console.log(sum); // 输出 [8,13,22]

常见踩坑点(你可能遇到的问题)

  • 忘记给reduce设置初始值:如果不给reduce加第二个参数(初始值0),当子数组只有一个元素时,reduce会直接返回那个元素,但如果子数组为空会报错;更关键的是,初始值能确保求和从0开始,避免非预期的类型转换或结果。
  • forEach里没正确维护结果数组:比如忘记初始化sum数组,或者在forEach里重新声明了sum导致外部无法访问。
  • 子数组包含非数字元素:如果你的多维数组里有字符串或其他非数字类型,需要先做类型转换,比如acc + Number(curr),否则会变成字符串拼接。

内容的提问来源于stack exchange,提问作者Ashley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:31:51