Array.prototype.every() - 获取falsy值元素

时间:2015-02-11 13:40:48

标签: javascript arrays

考虑Array.prototype.every()函数,

我怎么能得到 falsy 元素?例如 -

function isBigEnough(element, index, array) {
  return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough);   // get the element "5" (falsy) 

2 个答案:

答案 0 :(得分:4)

您可以使用过滤器:

function tooSmall(element){
    return element < 10
}

[12, 5, 8, 130, 44].filter(tooSmall) // gives [5, 8]

[12, 5, 8, 130, 44].filter(tooSmall)[0] // gives the first element ie 5

如果您想坚持使用太大的功能,那么您可以使用:

function not(fn) {
    return function(){
        return !fn.apply({},arguments)
    }
}

[12, 5, 8, 130, 44].filter(not(isBigEnough)) // [5, 8]

答案 1 :(得分:1)

我同意您要使用过滤器的其他答案/评论。但是,我在另一方面以不同的方式解释您的问题。我如何解释您的问题是,一旦您过滤到bigEnough,您怎么能过滤到足够大。

对此的一个答案是使用下划线的_.difference方法:

var entireArray = [12, 5, 8, 130, 44];
var bigEnoughVals = entireArray.filter(isBigEnough); 
var tooSmallVals = _.difference(entireArray, bigEnoughVals);

function isBigEnough(element, index, array) {
  return element >= 10;
}

请参阅http://underscorejs.org/#difference