【问题标题】:Sum of range---getting "undefined"范围之和---得到“未定义”
【发布时间】:2018-02-19 16:47:24
【问题描述】:

我正在寻找一个范围的总和,但我不断得到“未定义”。我认为有些地方有问题,但我不确定是什么。

第 1 部分:“编写一个范围函数,该函数接受两个参数 start 和 end,并返回一个数组,其中包含从 start 到(包括)end 的所有数字:

第 2 部分:“接下来,编写一个 sum 函数,它接受一个数字数组并返回这些数字的总和。运行前面的程序,看看它是否确实返回 55。”

// Part 1
function deRange(start, end, step) {

  if (step === null) {
    step = 1;

    var blank = [];

    if (step > 0) {
      for (var i = start; i <= end; i += step)
        blank.push(i);
    } else {
      for (var i = start; i >= end; i += step)
        blank.push(i);
    }
  }
  return blank;
}

// Part 2
function theSum(blank) {
  var total = 0;
  for (var i = 0; i < blank.length; i++)
    total += blank[i];
  return total;
}

console.log(deRange(1, 10));
console.log(deRange(5, 2, -1));
console.log(theSum(deRange(1, 10)));

【问题讨论】:

  • 可能是因为第二个for 循环之后的} 括号吗?
  • 您在deRange 中缺少第三个参数。即使它为空,你也应该显式调用它(deRange(1, 2, null)

标签: javascript arrays function for-loop range


【解决方案1】:

您的大括号放错了位置。这有效:

function range(start, end, step) {
  if (step === null) {
    step = 1;
  }
  var blank = [];
  if (step > 0) {
    for (var i = start; i <= end; i += step)
      blank.push(i);
  } else {
    for (var i = start; i >= end; i += step)
      blank.push(i);
  }
  return blank;
}
console.log(range(1, 5, null));

请注意,您正在检查step 是否为null,因此用户仍需要明确给出null 作为参数。如果您想在没有提供第三个参数的情况下设置默认值,请使用例如:

step = step || 1;

(这也将0 视为缺少参数,这很好。)

【讨论】:

    【解决方案2】:

    下面我修复了您的代码并注释了您在其中的一些错误。查看演示。

    // Part 1
    function deRange(start, end, step) {
    
      /**
       * If you want to make sure 'step' is not 0 (zero) either,
       * change the if like this:
       * if(!step) { step = 1; }
       */
      if (step === null || typeof step === 'undefined') { // <- also check when 'step' was not passed as argument
        step = 1;
      } // <-- curly brace here!
      var blank = [];
    
      if (step > 0) {
        for (var i = start; i <= end; i += step)
          blank.push(i);
      } else {
        for (var i = start; i >= end; i += step)
          blank.push(i);
      }
      return blank;
    }
    
    // Part 2
    function theSum(blank) {
      var total = 0;
      for (var i = 0; i < blank.length; i++)
        total += blank[i];
      return total;
    }
    
    console.log(deRange(1, 10));
    console.log(deRange(5, 2, -1));
    console.log(theSum(deRange(1, 10)));

    【讨论】:

    • 谢谢!我没有意识到“未定义”和“空”都必须在第一个 if 语句中。
    • 我很高兴能提供帮助,@Tsardines。请注意,我更新了我的答案,以便为您提供额外的“提示”。如果用户将0 提供为step,则该函数将进入无限循环。因此,如果您想确保step 在到达loop 时永远不会是0,请替换您的ifif(!step) { step = 1; }
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 2021-09-26
    • 1970-01-01
    • 2018-05-16
    • 2019-07-08
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多