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

如何对n个数组对应位置元素求和?已尝试Array.prototype.map()遇阻

二维数组对应位置元素求和的实现方案

嘿,这个需求其实用Array.prototype.map()配合Array.prototype.reduce()就能完美解决,我来给你一步步拆解逻辑:

核心思路

我们需要针对每个索引位置,把所有子数组在该位置的元素累加起来。具体来说:

  1. 以第一个子数组的长度为基准(假设所有子数组长度一致,若不一致可以做兼容处理),遍历每个索引位置;
  2. 对每个索引位置,用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:46:02