JavaScript While循环不会将结果正确打印到控制台

时间:2015-09-03 04:02:01

标签: javascript arrays while-loop break

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

range函数将范围的startend个数作为参数,并用整个范围填充rangeArray[]

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

我的sum函数正在正确执行作业(将return替换为console.log()以查看此内容),但我宁愿让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)
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

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

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

&#13;
&#13;
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);
&#13;
&#13;
&#13;

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

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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

&#13;
&#13;
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)
&#13;
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;

你可以像

那样更清晰地写出来

&#13;
&#13;
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)
&#13;
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;