2013-05-03 6 views
4

У меня есть массив объектов, и некоторые из них задали Selected = true. Использование _.where Я получаю новый массив, у которого есть только выбранные клиенты. Есть ли способ получить клиентов, у которых нет этого атрибута? Я не хочу, чтобы установить Selected = false для остальных клиентов и захватить их, противоположный _.where (список, свойства)

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

Большое спасибо!

ответ

2

вы могли бы сделать это таким образом, если вы уверены, что недвижимость там не будет:

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

это не будет работать, если объект имеет Selected: false

Вы также можете использовать _.filter, которые вероятно, будет лучше:

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

Большого спасибо! Это было так просто, я не знал, что вы можете передать неопределенный параметр. Еще раз спасибо. – jimakos17

2

не существует противоположная точно, но вы можете легко использовать только filter, который позволяет йо U указать функцию в качестве предиката (или аналогично, reject):

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

Точно так же, если вы хотите список клиентов, чьи Selected не определен или ложное:

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

Используйте .filter метод вместо

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

использование _.reject

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

Docs: http://underscorejs.org/#reject

Возвращает значения в списке без элементов, которые проходят тест на истину (итератор). Противоположность фильтра.

Другого вариантом, если вам нужна именно эта логика много: Вы можете также создать свое собственное Underscore подмешать с: _.mixin и создать функции и сохранить хороший короткий синтаксис _.where