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

JavaScript While loop will not print results properly to console

我的问题出在我的第二个函数 sum 上。然而,这里是完整的解释:

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

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

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

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

tl;博士

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

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)

while 循环中删除 return,这将从函数 sum 中 return 并且下一行 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);

问题出在while循环中的return,其中returns数组中第一项的值作为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>