我需要在哪裏但與不是的情況。例如,我想找到的戲劇,它沒有名字「莎士比亞」:如何讓`哪裏不是`情況?
_.where(listOfPlays, {author: !"Shakespeare", year: 1611});
^^^^^^^^^^^^^
NOT Shakespeare
如何與underscore
辦呢?
我需要在哪裏但與不是的情況。例如,我想找到的戲劇,它沒有名字「莎士比亞」:如何讓`哪裏不是`情況?
_.where(listOfPlays, {author: !"Shakespeare", year: 1611});
^^^^^^^^^^^^^
NOT Shakespeare
如何與underscore
辦呢?
_.filter(listOfPlays, function(play) {
return play.author !== 'Shakespeare' && play.year === 1611;
});
http://underscorejs.org/#filter
where
無非是一個方便的包裝圍繞filter
:
// Convenience version of a common use case of `filter`: selecting only objects
// containing specific `key:value` pairs.
_.where = function(obj, attrs) {
return _.filter(obj, _.matches(attrs));
};
試試這個:
_.filter(listOfPlays,function(i){
return i['author']!='Shakespeare' && i['year']==1611;
});
你可以自己做飯的「不到哪」的_.where
版本這樣
_.mixin({
"notWhere": function(obj, attrs) {
return _.filter(obj, _.negate(_.matches(attrs)));
}
});
然後你就可以寫你這樣的代碼
_.chain(listOfPlays)
.where({
year: 1611
})
.notWhere({
author: 'Shakespeare'
})
.value();
注:_.negate
只能從V1。 7.0。所以,如果您使用的是_
以前的版本,你可能想要做這樣的事情
_.mixin({
"notWhere": function(obj, attrs) {
var matcherFunction = _.matches(attrs);
return _.filter(obj, function(currentObject) {
return !matcherFunction(currentObject);
});
}
});
是的,它會很酷!謝謝!有一句話,最好把函數命名爲not()。 – Warlock 2014-10-01 15:11:30
@Warlock我們已經有了一個名爲['_.negate'](http://underscorejs.org/#negate)的函數,所以'not'和'negate'可能會讓人困惑...... – thefourtheye 2014-10-01 15:12:17
好的,我明白了。謝謝! – Warlock 2014-10-01 15:12:55
正確答案充沛,但技術上的OP只是問否定。您也可以使用拒絕,它本質上與過濾器相反。要達到1611的複合條件而不是莎士比亞:
_.reject(_.filter(listOfPlays, function(play){
return play.year === 1611
}), function(play) {
return play.author === 'Shakespeare';
});
我認爲,'_.not()'包裝也是有用的。例如,'_.not(listOfPlays,{author:「Shakespeare」})'。 – Warlock 2014-10-01 15:05:10