Для чего нужен reduce?
Массивы и структуры данных
`reduce` — метод массива, который сворачивает все элементы в одно значение, применяя функцию-аккумулятор слева направо. Это самый универсальный метод перебора.
Синтаксис
arr.reduce((accumulator, current, index, array) => newAccumulator, initialValue);- accumulator — накопленное значение.
- current — текущий элемент.
- initialValue — начальное значение (важно указывать).
Примеры
// Сумма
[1, 2, 3, 4].reduce((acc, n) => acc + n, 0); // 10
// Максимум
[3, 7, 2].reduce((max, n) => Math.max(max, n), -Infinity); // 7
// Группировка
users.reduce((acc, u) => {
(acc[u.role] ??= []).push(u);
return acc;
}, {});
// Подсчёт вхождений
['a', 'b', 'a'].reduce((acc, x) => {
acc[x] = (acc[x] || 0) + 1;
return acc;
}, {});Зачем нужен
reduce заменяет циклы для агрегации: суммы, объекты из массивов, флаттенинг, композиция функций. Через него можно выразить map и filter.
Нюансы
- Всегда задавайте
initialValue— иначе на пустом массиве будет ошибка, а первый элемент станет аккумулятором. - Возвращайте аккумулятор из коллбэка.
Коротко для собеседования
reduce сворачивает массив в одно значение через функцию-аккумулятор: суммы, группировки, подсчёты, построение объектов. Универсален (выражает map/filter). Задавайте initialValue и всегда возвращайте аккумулятор.