4

我有一组对象,我设置Selected = true了一些客户。使用_.where我得到一个只有选定客户的新数组。有什么方法可以获取没有这个属性的客户吗?我不想设置Selected = false其他客户并抓住他们

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

非常感谢!

4

4 回答 4

4

利用_.reject

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

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

返回列表中的值,不包含真值测试(迭代器)通过的元素。过滤器的反面。

如果你非常需要这个特定的逻辑,另一个选择:你也可以创建你自己的下划线混合:_.mixin并创建一个_.whereNot函数并保持漂亮的简短语法_.where

于 2013-05-03T21:00:35.200 回答
2

如果您确定该属性不存在,您可以这样做:

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

如果对象有,这将不起作用Selected: false

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

_.filter(customers, function(o) { return !o.Selected; });
于 2013-05-03T20:57:02.740 回答
2

我没有完全相反的情况,但您可以轻松地使用filter,它可以让您指定一个函数作为谓词(或类似地,reject):

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

同样,如果您想要一个Selected未定义错误的客户列表:

_.reject(customers, function(customer) { customer.Selected === true });
于 2013-05-03T20:57:25.647 回答
2

改用 .filter 方法

_.filter(customers, function(c) {return !c.Selected;});
于 2013-05-03T20:57:44.773 回答