Javascript - 函数总是返回0(循环不执行)

时间:2016-01-08 12:19:53

标签: javascript

我正在为freeCodeCamp工作coding exercise。练习的目的是将数组作为包含2个数字的输入。它应该返回这两个数字的总和以及它们之间的所有数字。

我尝试使用Math.min()Math.max()作为参数编写一个简单的for循环,但不知何故,我的函数总是返回0.基本逻辑是for循环从最低编号开始数组,然后递增1直到它到达数组中的最大数字,并始终将数字添加到输出变量。

function sumAll(arr) {
  var outcome = 0;
  for(var x = Math.min(arr); x<Math.max(arr); x++) {
    outcome += x;
  }
  return outcome;
}

sumAll([1, 4]);

感谢任何帮助。

8 个答案:

答案 0 :(得分:1)

Math.minMath.max不会将数组作为参数,而是将数字列表作为单独的参数。

要使这些方法适用于数组,请使用此技巧:

Math.min.apply(Math, [1,2,3]) // --> 1

Math.max

也是如此

答案 1 :(得分:1)

Math.minMath.max不接受列表作为参数。如果要对其应用列表,请使用Math.min.apply(Math, arr)

答案 2 :(得分:1)

您使用Math.maxMath.min错误。要将它们与数组一起使用,可以使用spread运算符。 (注意:扩展运算符是ECMAScript 6中的新增功能,因此旧版浏览器不支持它。)见下文:

function sumAll(arr) {
  var outcome = 0;
  for(var x = Math.min(...arr); x<Math.max(...arr); x++) {
    outcome += x;
  }
  return outcome;
}

sumAll([1, 4]);

有关详细信息,请参阅MDN:

答案 3 :(得分:0)

问题是Math.min ()Math.max ()不将数组作为参数。这是一个可以接受的替代方案吗?

function sumAll(min, max) {
  var outcome = 0;
  for(var x = min; x<max; x++) {
    outcome += x;
  }
  return outcome;
}

sumAll(1,4);

其他一些人提供了从阵列中获取最低/最高数字的方法。

答案 4 :(得分:0)

错误在Math.min(arr)Math.min(arr)评估为NaN。如果您需要从arr获取最小数值,请改为使用Math.min.apply(Math, arr)

祝你好运!

答案 5 :(得分:0)

试试这个

 function sumAll(arr) {
  console.log(arr);
  var outcome = 0;
  for(var x = Math.min(...ar1); x<Math.max(...ar1); x++) {
    outcome += x;
  }
  return outcome;
}

Math.min(...ar1) paranthesis中的三个点称为扩展运算符

扩展运算符允许在需要多个参数(用于函数调用)或多个元素(用于数组文字)的位置扩展表达式。

page link

答案 6 :(得分:0)

function sum(arr) {
    var min = arr[0] < arr[1] ? arr[0] : arr[1],
    max = arr[0] > arr[1] ? arr[0] : arr[1],
    result = 0;

    for (var i = min; i <= max; i++) {
      result += i;
    }

    return result;
 }

答案 7 :(得分:0)

实际上你的代码永远不会进入for循环,因为在for循环初始化部分你要为x<Math.max(arr)分配数组的最小值然后一旦你正在比较x和数组{min}的min所以条件失败了。那么outcome总是为0。