如何对n个数组对应位置元素求和?已尝试Array.prototype.map()遇阻
二维数组对应位置元素求和的实现方案
嘿,这个需求其实用Array.prototype.map()配合Array.prototype.reduce()就能完美解决,我来给你一步步拆解逻辑:
核心思路
我们需要针对每个索引位置,把所有子数组在该位置的元素累加起来。具体来说:
- 以第一个子数组的长度为基准(假设所有子数组长度一致,若不一致可以做兼容处理),遍历每个索引位置;
- 对每个索引位置,用
reduce遍历整个二维数组,累加所有子数组在该索引的元素值。
代码实现
var values = [[23,45,12,67],[26,35,65,23],[45,73,12,54],[32,45,65,86]]; // 计算对应位置的总和 const sum = values[0].map((_, idx) => { return values.reduce((total, currentArr) => total + currentArr[idx], 0); }); console.log(sum); // 输出: [126, 198, 154, 230]
代码解释
values[0].map((_, idx) => { ... }):我们用第一个子数组来驱动遍历,这里的_是占位符(因为我们不需要当前元素的值,只需要它的索引idx),确保我们能覆盖所有需要求和的位置。values.reduce((total, currentArr) => total + currentArr[idx], 0):reduce负责累加每个子数组在idx位置的元素,初始值0保证累加从0开始,避免出现NaN。
边界情况兼容
如果你的二维数组可能为空,或者子数组长度不一致,可以做如下兼容:
var values = [[23,45,12],[26,35],[45,73,12,54]]; // 子数组长度不一致的情况 const sum = values.length === 0 ? [] : values[0].map((_, idx) => { return values.reduce((total, currentArr) => total + (currentArr[idx] || 0), 0); }); console.log(sum); // 输出: [94, 153, 24, 54]
这里currentArr[idx] || 0的作用是:如果某个子数组在当前索引位置没有元素,就用0代替,避免累加时出现NaN。
内容的提问来源于stack exchange,提问作者Yash Jain
相关产品推荐
相关产品推荐

