在javascript中否定布尔函数

时间:2015-04-09 18:09:01

标签: javascript

如何否定布尔函数?

使用类似的东西:

 _.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]

2 个答案:

答案 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)});