_.where(列表,属性)的对面

时间:2013-05-03 20:51:00

标签: javascript underscore.js

我有一组对象,我将Selected = true设置为某些客户。 使用_.where我正在获得一个只有所选客户的新阵列。 是否有任何方法可以获得没有此属性的客户? 我不想将Selected = false设置为其他客户并通过

抓住它们
_.where(customers, {Selected: false}); 

非常感谢!

4 个答案:

答案 0 :(得分:4)

使用_.reject

_.reject(customers, function(cust) { return cust.Selected; });

文档:http://underscorejs.org/#reject

  

返回list中的值,不包含真值测试(迭代器)传递的元素。与过滤器相反。

另一个选择,如果您需要这个特定的逻辑:您还可以创建自己的Underscore Mixin:_.mixin并创建一个_.whereNot函数并保留_.where的短语法

答案 1 :(得分:2)

你可以这样做,如果你确定该财产不在那里:

_.where(customers, {Selected: undefined});

如果对象具有Selected: false

,则无效

您也可以使用可能更好的_.filter

_.filter(customers, function(o) { return !o.Selected; });

答案 2 :(得分:2)

我并不完全相反,但您可以轻松使用filter,这可以让您将函数指定为谓词(或类似地,reject):

_.filter(customers, function(customer) { typeof customer.Selected == "undefined" });

同样,如果您需要Selected未定义 false的客户列表:

_.reject(customers, function(customer) { customer.Selected === true });

答案 3 :(得分:2)

使用.filter方法

_.filter(customers, function(c) {return !c.Selected;});