【问题标题】:JavaScript While loop will not print results properly to consoleJavaScript While 循环不会将结果正确打印到控制台
【发布时间】:2015-11-28 18:19:52
【问题描述】:

我的问题在于我的第二个函数sum。但是,这里是完整的解释:

range 函数将start 和end 范围的数字作为参数,并用整个范围填充rangeArray[]。

sum 函数将数组作为参数,并将数组中的所有数字相加。

我的 sum 函数正在正确执行作业(将 return 替换为 console.log() 以查看此内容),但我宁愿让 while 循环在 while 循环中断后打印一个最终数字 (num)。

现在它只打印 10 到控制台(我怀疑是因为它正在打印数组 + 0 中的最后一个元素,在本例中为 10)。

tl;博士

为什么 console.log(n) 在函数 sum 中断后的 while 循环后不起作用?

rangeArray = []

function range(start, end) {

  i = 0
  while (i < end) {
    rangeArray.push(start)
    i = i + 1
    start = start + 1
  }

}

range(1, 10)

function sum(array) {

  num = 0
  i = 0
  lastIndex = array.length - 1

  while (i <= lastIndex) {
    return num = num + array.pop()
    i++
  }
  console.log(n)

}

sum(rangeArray)

【问题讨论】:

    标签: javascript arrays while-loop break


    【解决方案1】:

    从while循环中删除return,这将从函数sum返回,并且下一行console.log不会执行。

    另一个问题是,您正在记录n,其中变量的名称是num。

    rangeArray = []
    
    function range(start, end) {
    
      i = 0
      while (i < end) {
        rangeArray.push(start)
        i = i + 1
        start = start + 1
      }
    
    }
    
    range(1, 10)
    
    function sum(array) {
    
      num = 0
      i = 0
      lastIndex = array.length - 1
    
      while (i <= lastIndex) {
        num = num + array.pop()
        i++
      }
      document.write(num);
    }
    
    sum(rangeArray);

    如果您正在寻找优化的解决方案:

    function sum(start, end) {
      var total = 0;
    
      while (start <= end) {
        total += start++;
        // Add the start value to total
        // Increment the start value by one
      }
    
      document.write(total);
      return total;
    }
    
    var total = sum(1, 10);

    【讨论】:

      【解决方案2】:

      问题是while循环中的return,它返回数组中第一项的值作为sum的值

      function range(start, end) {
        var rangeArray = [],
          i = start; //use var to create it as a local variable
        while (i <= end) {
          rangeArray.push(i);
          i++;
        }
        return rangeArray;
      }
      
      var rangeArray = range(1, 10)
      snippet.log('range: ' + rangeArray)
      
      function sum(array) {
      
        var num = 0,
          i = 0,
          len = array.length
      
        while (i < len) {
          num += array[i];
          i++
        }
        snippet.log('sum: ' + num)
        return num;
      }
      
      sum(rangeArray)
      <!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
      <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

      你可以写得更干净像

      function range(start, end) {
        var rangeArray = [],
          i = start; //use var to create it as a local variable
        while (i <= end) {
          rangeArray.push(i);
          i++;
        }
        return rangeArray;
      }
      
      var rangeArray = range(1, 10)
      snippet.log('range: ' + rangeArray)
      
      function sum(array) {
        var num = array.reduce(function(a, b) {
          return a + b
        });
        return num;
      }
      
      var val = sum(rangeArray);
      snippet.log('sum: ' + val)
      <!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
      <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

      【讨论】:

        猜你喜欢
        • 2023-02-06
        • 2013-05-25
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        相关资源
        最近更新 更多