JavaScript数组求和函数中for循环失效问题求助
问题排查与修复
核心问题
第二个for循环的终止条件错误:p <= d.length会导致循环多执行一次,访问到数组的越界索引。
数组索引从0开始,最后一个元素的索引是d.length - 1。当p等于d.length时,d[p]的值为undefined,将其加到数值m中会让m变成NaN,最终返回结果异常。
修复后的代码
把第二个循环的条件改为p < d.length即可:
function addUp(num) { let d = []; let m = 0; for (let i = 0; i < num; i++) { d.push(i) } // 修正循环终止条件 for (let p = 0; p < d.length; p++) { m += d[p] } return m; } console.log(addUp(10)) // 输出45
优化方案(可选)
没必要额外创建数组,直接用等差数列求和公式就能完成计算,效率更高:
function addUp(num) { // 计算0到num-1的和:(首项+末项)*项数/2 return (0 + (num - 1)) * num / 2; } console.log(addUp(10)) // 输出45
如果需求是求1到num的和,公式改为num * (num + 1) / 2即可,比如addUp(10)会返回55。
内容的提问来源于stack exchange,提问作者npr88
相关产品推荐
相关产品推荐

