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



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

如何获取falsy元素?例如

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

您可以使用过滤器:

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]

我同意您想要使用过滤器的其他答案/注释。然而,我从另一个方面对你的问题有不同的解释。我如何理解你的问题是,一旦你过滤到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

最新更新