【问题标题】:Defining functions w/ for loop & if statement to return array & sum [closed]使用/ for循环和if语句定义函数以返回数组和总和[关闭]
【发布时间】:2021-02-28 01:38:15
【问题描述】:

我正在阅读 Eloquent JavaScipt 第 3 版来学习 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

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

【问题讨论】:

  • 我首先建议您使用能够更好地识别它们所代表的内容的名称来命名您的参数。这本书使用“开始”、“结束”和“步骤”等名称是有原因的。
  • 错字:i &gt;= a 应该是i &gt;= b
  • for (let i = a; i &gt;= a; i += c) numbers.push(i); 应该是for (let i = a; i &gt;= b; i += c) numbers.push(i);
  • @ScottMarcus 谢谢。是的,使用名称命名参数更好。我需要用 Javascript 变得雄辩。
  • @ScottMarcus:在我自己的代码中,我对这件事的感觉摇摆不定,更不用说大三学生了。但要记住这一点总是很有趣。

标签: javascript arrays function for-loop if-statement


【解决方案1】:

sum() 中的 for 循环是错误的。应该是:

for (let i = 0; i < array.length; i++){

注意我是如何使用i &lt; array.length,而不是i &lt;= array.length

我们希望循环在遍历完每个元素后停止。使用&lt;= 意味着当i10array[10] 不存在时,循环仍会运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 2023-03-30
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多