不同长度数组求和问题求解:现有代码遇长度差时产生空值
数组求和:处理不同长度数组的解决方案
你的问题出在短数组的高位索引无法取到有效值,当i超过短数组的长度时,a[i]或b[i]会返回undefined,和数字相加会得到NaN,最终导致结果数组出现空值。
修改方案
核心思路是:短数组的高位补0参与计算,同时处理最后可能的进位。
修改后的代码:
function sumOfArrays(a, b) { const maxLength = Math.max(a.length, b.length); let result = new Array(maxLength); let carry = 0; for (let i = maxLength - 1; i >= 0; i--) { // 索引超出数组长度时用0替代 const elementA = i < a.length ? a[i] : 0; const elementB = i < b.length ? b[i] : 0; const additionResult = elementA + elementB + carry; result[i] = additionResult % 10; carry = Math.floor(additionResult / 10); } // 如果最后还有进位,添加到结果最前面 if (carry > 0) { result.unshift(carry); } return result; }
关键修改点
- 补0处理:通过
i < a.length判断索引是否在数组范围内,超出则用0代替,避免undefined参与运算。 - 进位处理:循环结束后如果
carry大于0,说明需要额外添加一位(比如[9,9] + [9]会得到[1,0,8])。 - 返回结果:原代码没有返回值,补充
return result让函数能输出计算结果。
测试示例:
console.log(sumOfArrays([1,2,3], [1,2])); // 输出 [1,3,5] console.log(sumOfArrays([9,9], [9])); // 输出 [1,0,8] console.log(sumOfArrays([5], [1,2,3])); // 输出 [1,2,8]
内容的提问来源于stack exchange,提问作者Micro-Scope
相关产品推荐
相关产品推荐

