2013-04-08 14 views
34

Po prostu zaczynam od JavaScript i korzystania z biblioteki podkreślników. Widzę, że mają one różne funkcje użyteczności, takie jak _.contains. Czy istnieje sposób na wykonanie tej pracy na obiektach?podkreślenie zawiera (_.contains) na typach obiektów

var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'}, {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ]; 

if (_.contains(indexes, {'id':1, 'name': 'jake'})) { 
    console.log("contains"); 
} 

Większość pokazanych przykładów ma proste tablice zawierające łańcuchy lub liczby. Zastanawiam się, co mogę zrobić, aby użyć ich funkcji użyteczności, takich jak _.contains dla obiektów. Dzięki.

Odpowiedz

58

contains wymaga wartości były porównywalne z ===, które nie będą działać w różnych przypadkach obiektów.

Na przykład będzie działać, jeśli przeszedłeś dokładnie szukany obiekt, co nie jest zbyt użyteczne.

if (_.contains(indexes, indexes[0])) { 

Można jednak użyć where lub findWhere.

if (_.findWhere(indexes, {'id':1, 'name': 'jake'})) { 

findWhere nowego w podkreślenia 1.4.4 więc jeśli go nie masz, możesz użyć where.

if (_.where(indexes, {'id':1, 'name': 'jake'}).length > 0) { 
+0

Dzięki, findWhere dla mnie działa –

12

Do tego celu naprawdę chciałbyś użyć _.where.

var indexes = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'}, {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ]; 

if (_.where(indexes, {'id':1, 'name': 'jake'}).length) { 
    console.log("contains"); 
} 
+0

Trzeba by było zrobić 'if (_. Gdzie (/ *...*/). Length)', ponieważ '_.where' zawsze zwraca obiekt. – cmptrgeekken

+0

_.findWhere() zwraca obiekt- _.where() zwraca tablicę - ale zapomniałem ".length" – mike

+0

tak :) Nie zdawałem sobie sprawy, że zapomniałem ".length" dopóki nie odpowiem. Zaktualizowano moją odpowiedź – mike