Вопрос проверяет понимание порядка преобразований массива, влияния на производительность и побочных эффектов (мутация при sort).
Обычно выгодно сначала делать filter, чтобы уменьшить объем данных для следующих шагов. sort часто выполняют ближе к концу, потому что сортировка дороже по времени и при этом мутирует массив, если не скопировать его. map логично делать после фильтрации, чтобы не вычислять лишнее. reduce чаще ставят последним, когда нужно собрать итог (число, объект, Map и т.д.).
Порядок операций выбирают так, чтобы делать дорогие действия на меньшем объеме данных и избегать лишних вычислений.
filter — отбирает элементы по условию и возвращает новый массив.
map — преобразует каждый элемент и возвращает новый массив.
sort — сортирует массив на месте и возвращает ссылку на тот же массив.
reduce — сворачивает массив в одно значение (например, число или объект).
filter — уменьшить массив как можно раньше.
map — преобразовать только то, что осталось после фильтра.
sort — сортировать ближе к концу, уже готовые данные (и обычно после map, если сортировка зависит от вычисленного поля).
reduce — финальная агрегация/сбор результата.
filter и map — это линейные проходы по массиву.
sort обычно дороже (сравнения и перестановки), поэтому лучше сортировать меньший массив.
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);
Если sort должен учитывать поля исходных элементов, а map эти поля убирает — сортируйте раньше или сохраняйте поля.
Если reduce заменяет map + filter (в один проход) — это может быть быстрее, но хуже читаемость.
Чаще всего используйте порядок filter → map → sort → reduce, а сортировку делайте безопасно (через копию или toSorted), чтобы не мутировать исходный массив.