@Artemio95

Как переписать функцию, используя map или reduce?

filteredProtectionList() {
            const arr = [];
            this.array.forEach((el) => {
                if (this.array2.findIndex((element) => element.id === el) >= 0) {
                    retArr.push(el);
                }
            });
            return arr;
        }

Как эту функцию переписать через map или reduce?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Не надо тут ни map, ни reduce:

filteredProtectionList() {
  return this.array.filter(n => this.array2.some(m => m.id === n));
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега JavaScript
Ищу TypeScript разработчика
filteredProtectionList() {
  const idSet = new Set(this.array2.map(({id}) => id));
  return this.array.filter(el => idSet.has(el));
}
За одно и сложность O(n) вместо O(n2)
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
хз что за retArr, но если retArr - это на самом деле arr, и в коде опечатка, то будет вот:
function filteredProtectionList(ids, elements) {
    return ids.filter((elementId) => elements.findIndex(({id}) => elementId === id) >= 0);
}

Но зачем?
Если заменить функцию forEach на обычный цикл, то вся эта шняга будет даже лучше работать, чем через filter.

Но я бы лучше посмотрел, можно ли иначе вообще алгоритм сделать, тк findIndex - это дорого. (например можно вместо массива сделать словарь, в котором ключом будет id)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы