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

JS实现不等长数组对应元素求和的sum函数技术咨询

JavaScript数组对应元素求和并保留长数组剩余元素的解决方案

嘿,我注意到你已经尝试用map方法来实现数组对应元素求和了,但确实碰到了map的局限性——它只会遍历调用它的数组的长度,所以短数组遍历完就停了,长数组剩下的元素根本没机会被处理到。别担心,咱们来调整实现逻辑,完美满足你的需求!

核心思路

要解决这个问题,关键是以两个数组中较长的那个的长度为基准进行遍历:

  • 当两个数组在当前索引都有元素时,将它们相加后放入结果数组
  • 当只有其中一个数组在当前索引有元素时,直接把这个元素放入结果数组(也就是保留长数组的剩余元素)

完整实现代码

这里有两种简洁且易读的实现方式:

方式一:for循环(直观易懂)

function sum(arr1, arr2) {
  const maxLength = Math.max(arr1.length, arr2.length);
  const result = [];
  
  for (let i = 0; i < maxLength; i++) {
    if (i < arr1.length && i < arr2.length) {
      // 两个数组都有当前索引的元素,求和
      result.push(arr1[i] + arr2[i]);
    } else {
      // 只有一个数组有元素,直接保留
      result.push(i < arr1.length ? arr1[i] : arr2[i]);
    }
  }
  
  return result;
}

方式二:Array.from(更简洁的函数式写法)

function sum(arr1, arr2) {
  const maxLen = Math.max(arr1.length, arr2.length);
  return Array.from({ length: maxLen }, (_, index) => {
    const hasBoth = index < arr1.length && index < arr2.length;
    return hasBoth ? arr1[index] + arr2[index] : (arr1[index] ?? arr2[index]);
  });
}

验证你的示例

调用sum([1,2,3,4], [5,6,7,8,9]),会返回[6,8,10,12,9],完全符合你的要求。

为什么你之前的代码不行?

你之前写的:

var sum = array1.map((num, idx) => num + array2[idx]);

因为map方法是基于调用它的数组(也就是array1)的长度来遍历的,当array1比array2短时,遍历到array1的最后一个元素就停止了,array2后面的元素根本没被处理到。而我们的实现是基于最长数组的长度遍历,确保每个元素都被覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:00:44