JS中Sum函数仅计算数组前几项,求问题原因及解决办法
问题原因分析
你的sum函数只计算前6个元素,核心问题有两个:
- 循环条件与数组长度动态变化冲突:每次调用
arr.shift()会删除数组的第一个元素,导致arr.length在循环过程中不断减小。初始数组长度是10,循环条件i <= arr.length会让循环提前终止——当i增加到6时,此时数组已经被shift了6次,长度变为4,6 <= 4不成立,循环停止,只完成了6次累加。 - 修改原数组的副作用:
shift会直接修改原数组arr,求和操作不应该改变原数组的结构,这会导致后续对arr的使用出现异常。
修复方案
以下是几种可行的修改方式,都能实现全数组求和且避免原数组被修改:
方案1:普通for循环遍历(最基础)
function sum() { let g = 0; // 用 < arr.length 作为循环条件,直接访问数组元素,不修改原数组 for (let i = 0; i < arr.length; i++) { g += arr[i]; } return g; }
方案2:forEach遍历(更简洁)
function sum() { let g = 0; arr.forEach(num => { g += num; }); return g; }
方案3:reduce方法(数组求和最优解)
利用数组的reduce方法可以一行完成求和,是JavaScript中处理数组累加的标准方式:
function sum() { return arr.reduce((total, current) => total + current, 0); }
内容的提问来源于stack exchange,提问作者fpbidni
相关产品推荐
相关产品推荐

