2015-04-09 3 views
2

Как отменить логическую функцию?negate boolean function in 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] 

ответ

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)}); 
+0

Спасибо за показывая мне это. Я использовал 'function (v) {return! Evens (v)}' – jmunsch

5

Подчеркивание имеет .negate() API для этого:

_.filter(bag, _.negate(evens)); 

Можно, конечно, в качестве собственного предиката:

var odds = _.negate(evens); 

затем

_.filter(bag, odds);