详解JavaScript中数组的两个方法every()与some()

作者:admin     字体:[增加 减小]    类型:原创
本文详细解说了JavaScript中数组的两个方法every与some,这两个函数在编程中非常有用,大家可以参考一下。

JavaScript中的every()和some()方法是数组的逻辑判定:它们对数组元素应用指定的函数进行判定,返回true或false。

every()方法就像数学中的“针对所有”的量词:当且仅当针对数组中的所有元素调用判定函数都返回true,它才返回true。

console.log([].every(function(x){return x>0;}));    //=>true,空数组永远为true

var  a = [0,1,2,3,4,5,6,7,8,9];
console.log( a.every(function(x){return x<5}) );    //=>false,并不是所有元素都小于5

some()方法就像数学中的“存在”量词:当数组中至少有一个元素调用判定函数返回true,它就返回true;当且仅当数组中的所有元素调用判定函数都返回false,它才返回false。

var  a = [0,1,2,3,4,5,6,7,8,9];
console.log( a.some(function(x){return x%3===0}) ); //=>true,有3的倍数

注意,一旦every()和some()确认该返回值它们就会立即停止遍历数组元素。some()在判定函数第一次返回true后就会返回true,但如果判定函数一直返回false,它将会遍历整个数组。为了演示这个算法,我们特制如下例子:

var  a = [0,1,2,3,4,5,6,7,8,9];
var bool = a.some(function(x){
    if (x%2===0) {
        console.log(x);
        return x;
    }
});

大家可能会想,这个例子在第一次循环0时,在if判断中就为真,此时由return返回0,但是事实上从控制台上,我们会发现它会输出0与3。这是因为0在JavaScript中表示false,这时候你返回false,它并不理你,它还要接着循环,直到能输出true或者到循环末尾。所以说,上面的代码应该将return x改为return true。这样才能得出正确的结果:只输出0。

every()在判定函数第一次返回false后就会返回false。但如果判定函数一直返回true,它将会遍历整个数组。