Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: array, method, filter

В каком порядке лучше выполнять операции: filter, sort, map, reduce?

Вопрос проверяет понимание порядка преобразований массива, влияния на производительность и побочных эффектов (мутация при sort).

Короткий ответ

Обычно выгодно сначала делать filter, чтобы уменьшить объем данных для следующих шагов. sort часто выполняют ближе к концу, потому что сортировка дороже по времени и при этом мутирует массив, если не скопировать его. map логично делать после фильтрации, чтобы не вычислять лишнее. reduce чаще ставят последним, когда нужно собрать итог (число, объект, Map и т.д.).

Длинный ответ

Порядок операций выбирают так, чтобы делать дорогие действия на меньшем объеме данных и избегать лишних вычислений.

Определение

  • filter — отбирает элементы по условию и возвращает новый массив.

  • map — преобразует каждый элемент и возвращает новый массив.

  • sort — сортирует массив на месте и возвращает ссылку на тот же массив.

  • reduce — сворачивает массив в одно значение (например, число или объект).

Практическое правило по умолчанию

  1. filter — уменьшить массив как можно раньше.

  2. map — преобразовать только то, что осталось после фильтра.

  3. sort — сортировать ближе к концу, уже готовые данные (и обычно после map, если сортировка зависит от вычисленного поля).

  4. reduce — финальная агрегация/сбор результата.

Почему так

  1. filter и map — это линейные проходы по массиву.

  2. sort обычно дороже (сравнения и перестановки), поэтому лучше сортировать меньший массив.

  3. sort мутирует массив — чтобы не сломать исходные данные, часто делают копию.

Пример

const users = [
  { name: "Ann", age: 21 },
  { name: "Bob", age: 17 },
  { name: "Cody", age: 30 },
];

const result = users
  .filter(u => u.age >= 18)
  .map(u => ({ ...u, label: `${u.name} (${u.age})` }))
  .toSorted((a, b) => a.age - b.age) // если нет toSorted — см. ниже
  .reduce((acc, u) => {
    acc.push(u.label);
    return acc;
  }, []);

console.log(result);

Если toSorted недоступен, делайте копию:

const sorted = [...arr].sort((a, b) => a - b);

Важные исключения

  1. Если sort должен учитывать поля исходных элементов, а map эти поля убирает — сортируйте раньше или сохраняйте поля.

  2. Если reduce заменяет map + filter (в один проход) — это может быть быстрее, но хуже читаемость.

Вывод

Чаще всего используйте порядок filter → map → sort → reduce, а сортировку делайте безопасно (через копию или toSorted), чтобы не мутировать исходный массив.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#array

#method

#filter

Подпишись на React Developer в телеграм