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

