Подтвердить что ты не робот

Lodash _.find все совпадения

У меня есть простая функция, чтобы вернуть мне объект, который соответствует моим критериям.

Код выглядит так:

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

Как я могу найти все результаты (не только первые), которые соответствуют этим критериям, но все результаты.

Спасибо за любой совет.

4b9b3361

Ответ 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));
})