2016-06-15 17 views
0

Ich habe Array von Objekten wie diesesWie das Array von Objekten filtern

var users = [ 
    { 'user': 'barney', 'age': 36, 'active': true , 'company':'abc' }, 
    { 'user': 'fred', 'age': 40, 'active': false, 'company':'pqr' }, 
    { 'user': 'pebbles', 'age': 1, 'active': true, 'company':'xyz' } 
]; 

ich das Array von Objekten filtern möchten, wo Firma abc oder xyz ist so das Ergebnis wie folgt

[ 
    { 'user': 'barney', 'age': 36, 'active': true , 'company':'abc' }, 
    { 'user': 'pebbles', 'age': 1, 'active': true, 'company':'xyz' } 
]; 
sein sollte

ich bin mit dem loadash wie diese

console.log(_.filter(users, {'company': 'xyz','company': 'abc'})) 

Es wird nicht richtig gefiltert. Kann mir jemand dabei helfen?

+0

Mögliche Duplikate von [lodash Filter Sammlung mit Array von Werten] (http://stackoverflow.com/questions/17251764/lodash-filter-collection-using-array-of-values) – Andreas

+0

Hallo, hat meine Antwort an Ihre Adresse Frage? – Quannt

Antwort

5

einfach die Standard-Syntax verwenden, sollte diese

_.filter(users, function(user) { return user.company == 'abc' || user.company == 'xyz'; }); 

Der kurze Grund arbeiten, dass der Code nicht in erster Linie funktionierte

_.filter(users, {'company': 'xyz','company': 'abc'})

, weil Sie eine Javascript vorbei waren Objekt mit doppeltem Eigenschaftsnamen company daher überschreibt die zweite Eigenschaft mit dem Wert abc die erste Eigenschaft. Was bedeutet, dass Sie tatsächlich dieses Dieses Objekt

_.filter(users, {'company': 'abc'})

{'company': 'abc'} dann _.matches weitergegeben werden taten, eine Funktion zu erzeugen, wird diese Funktion dann jedes Element des Arrays validieren.

var predicate = _.matches({'company': 'abc'}); 
    predicate({ 'user': 'barney', 'age': 36, 'active': true , 'company':'abc' }); // true 
    predicate( { 'user': 'fred', 'age': 40, 'active': false, 'company':'pqr' }); // false 
    predicate( { 'user': 'pebbles', 'age': 1, 'active': true, 'company':'xyz' }); // false 

die Ergebnisse in nur Barney zurückgegeben wird.