代码之家  ›  专栏  ›  技术社区  ›  Tsardines

范围之和---获取“未定义”

  •  0
  • Tsardines  · 技术社区  · 8 年前

    我在寻找一个范围的和,但我一直得到“未定义”我相信有什么地方不对,但我不确定是什么。

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

    第2部分:“下一步,编写一个求和函数,它接受一个数字数组并返回这些数字的和。运行上一个程序,看看它是否确实返回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)));
    2 回复  |  直到 8 年前
        1
  •  1
  •   Aurel Bílý    8 年前

    你把花括号放错地方了。这项工作:

    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 ,因此用户仍然需要显式地 无效的 作为参数。如果要在未提供第三个参数的情况下设置默认值,请使用例如:

    step = step || 1;
    

    (这也适用于 0 作为缺少的参数,这很好。)

        2
  •  0
  •   lealceldeiro VonC    8 年前

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

    // 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)));