Lodash _.find все совпадения
У меня есть простая функция, чтобы вернуть мне объект, который соответствует моим критериям.
Код выглядит так:
var res = _.find($state.get(), function(i) {
var match = i.name.match(re);
return match &&
(!i.restrict || i.restrict($rootScope.user));
});
Как я могу найти все результаты (не только первые), которые соответствуют этим критериям, но все результаты.
Спасибо за любой совет.
Ответы
Ответ 1
Просто используйте _.filter
- он возвращает все подходящие элементы.
_.фильтр
Итерирует по элементам коллекции, возвращая массив всех элементов, предикат которых возвращает true для. Предикат вызывается с тремя аргументами: (значение, индекс | ключ, коллекция).
Ответ 2
Вы можете использовать _.filter, передавая все ваши требования следующим образом:
var res = _.filter($state.get(), function(i) {
var match = i.name.match(re);
return match &&
(!i.restrict || i.restrict($rootScope.user));
});
Ссылка на документацию
Ответ 3
Без lodash с использованием ES6, FYI:
Основной пример (получает людей, возраст которых меньше 30):
const peopleYoungerThan30 = personArray.filter(person => person.age < 30)
Пример использования вашего кода:
$state.get().filter(i => {
var match = i.name.match(re);
return match &&
(!i.restrict || i.restrict($rootScope.user));
})