如何否定布尔函数?
使用类似的东西:
_.filter = function(collection, test) {
var tmp = []
_.each(collection, function(value){
if (test(value)) {
tmp.push(value);
}
})
return tmp
};
var bag = [1,2,3];
var evens = function(v) { return v % 2 === 0};
这是错误的:
// So that it returns the opposite of evens
var result = _.filter(bag, !evens);
结果:
[1,3]
答案 0 :(得分:5)
Underscore有一个.negate()
API:
_.filter(bag, _.negate(evens));
你当然可以把它藏为自己的谓词:
var odds = _.negate(evens);
然后
_.filter(bag, odds);
答案 1 :(得分:4)
尝试创建一个返回函数的函数:
function negate(other) {
return function(v) {return !other(v)};
};
像这样使用:
var result = _.filter(bag, negate(evens));
或者只是在调用时声明一个函数:
var result = _.filter(bag, function(v) {return evens(v)});