定义带有 for 循环和 if 语句的函数以返回数组和总和

我正在阅读 Eloquent JavaScipt 第三版来学习 JavaScript。我做了书中的一个练习,并且确信它是正确的。但显然我错了,因为它给我的结果与书中的解决方案不同。

目标是

  1. 编写一个范围函数,它接受两个参数(start 和 end),并返回一个包含从 start 到(并包括)end 的所有数字的数组。

  2. 编写一个 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

对我来说,代码看起来是一样的。我在这里缺少什么?


慕村225694
浏览 89回答 1
1回答

阿晨1998

你的for循环sum()是错误的。它应该是:for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;array.length;&nbsp;i++){请注意我如何使用i < array.length,而不是i <= array.length.我们希望循环在遍历完每个元素后停止。使用意味着当存在且不存在<=时循环仍然运行。i10array[10]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript