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
相关产品推荐
相关产品推荐

