2016-02-19 7 views
24

Mam prostą funkcję zwracania mi obiektu, który spełnia moje kryteria.lodash _.find wszystkie mecze

Kod wygląda następująco:

var res = _.find($state.get(), function(i) { 
     var match = i.name.match(re); 
     return match && 
      (!i.restrict || i.restrict($rootScope.user)); 
    }); 

Jak mogę znaleźć wszystkie wyniki (nie tylko pierwszy), który spełnia te kryteria, ale wszystkie wyniki.

Dzięki za anz doradz.

+2

Szukasz "_.filtra"? – georg

Odpowiedz

52

Po prostu użyj _.filter - zwraca wszystkie dopasowane elementy.

_.filter

iteracyjnie elementami odbioru, powracając tablicę wszystkich elementów źródłowych powraca do truthy. Predykat jest wywoływany trzema argumentami: (value, index | key, collection).

6

Można użyć _.filter, przekazując wszystkie wymagania tak:

var res = _.filter($state.get(), function(i) { 
     var match = i.name.match(re); 
     return match && 
      (!i.restrict || i.restrict($rootScope.user)); 
    }); 

Link to documentation

3

Bez lodash użyciu ES6, FYI:

prosty przykład (dostaje ludzi których wiek jest mniejszy niż 30):

const peopleYoungerThan30 = personArray.filter(person => person.age < 30) 

Przykład użycia Twojego kodu:

$state.get().filter(i => { 
    var match = i.name.match(re); 
    return match && 
      (!i.restrict || i.restrict($rootScope.user)); 
})