我正在阅读 Eloquent JavaScipt 第三版来学习 JavaScript。我做了书中的一个练习,并且确信它是正确的。但显然我错了,因为它给我的结果与书中的解决方案不同。目标是编写一个范围函数,它接受两个参数(start 和 end),并返回一个包含从 start 到(并包括)end 的所有数字的数组。编写一个 sum 函数,它接受一个数字数组并返回这些数字的总和这是我的代码。function range(a, b, c = a < b ? 1 : -1){ let numbers = []; if (c > 0) { for (let i = a; i <= b; i += c) numbers.push(i); } else { for (let i = a; i >= a; i += c) numbers.push(i); } return numbers;}function sum(array){ let result = 0; for (let i = 0; i <= array.length; i++){ result += array[i]; } return result;}下面是书上的解决方案function range(start, end, step = start < end ? 1 : -1) { let array = []; if (step > 0) { for (let i = start; i <= end; i += step) array.push(i); } else { for (let i = start; i >= end; i += step) array.push(i); } return array;}function sum(array) { let total = 0; for (let value of array) { total += value; } return total;}所以,如果我们运行console.log(range(1, 10));console.log(range(5, 2, -1));console.log(sum(range(1, 10)));我的结果是[1, 2, 3, 4, 5, 6, 7, 8, 9, 10][5]NaN预期结果是[1, 2, 3, 4, 5, 6, 7, 8, 9, 10][5, 4, 3, 2]55对我来说,代码看起来是一样的。我在这里缺少什么?
1 回答

阿晨1998
TA贡献2037条经验 获得超6个赞
你的for
循环sum()
是错误的。它应该是:
for (let i = 0; i < array.length; i++){
请注意我如何使用i < array.length
,而不是i <= array.length
.
我们希望循环在遍历完每个元素后停止。使用意味着当存在且不存在<=
时循环仍然运行。i
10
array[10]
添加回答
举报
0/150
提交
取消