为什么Javascript'every'函数返回false?

时间:2014-09-04 00:28:15

标签: javascript

我有一个快速的问题,为什么我的函数返回false,当我希望它返回true时。我查看了Array.prototype.every的文档,但我似乎仍然无法找到它。感谢您的帮助。

对于某些上下文,这是一个名为arithGeo的coderbyte问题的一部分。如果每个元素之间的差异相同,我在这里工作的当前函数应该返回true。在这里,我希望这会返回true,因为每个元素与下一个元素相距5。

这是我的功能

var arr = [5, 10, 15];
function isArith(arr){
    var diff = arr[1] - arr[0];
    return arr.every(function(val, ind, col){
      // if statement checks to make sure I stay in bounds.
      if(col[ind + 1] !== undefined){
         var next = col[ind + 1] - val;
         console.log(diff === next   );
         // logging shows the following statement to be true, for every iteration
         return diff === next; 
      }
    });
}


var arith = isArith(arr);
console.log('arith: ', arith) // logs false

2 个答案:

答案 0 :(得分:3)

在最后一次迭代中,您将返回undefined,这将被解释为false。代码就是这样做的,因为如果if失败(它在最后一个元素上执行),则没有return语句。如果您在return true之后将if添加到结尾处。

答案 1 :(得分:2)

当你到达最后一个元素时,你会测试是否有下一个元素,所以你不要将最后一个元素与任何东西进行比较。太棒了。但在这种情况下,您忘记return任何内容,默认returnundefined,这是假的。只需输入else return true