JavaScript · массивы
Метод Array.reduce()
reduce() проходит по массиву и собирает один итог: число, объект, строку или новую коллекцию. Главные части метода — аккумулятор и начальное значение.
Сумма чисел
На каждом шаге callback возвращает новое значение аккумулятора. Второй аргумент после функции задаёт его начальное состояние.
const prices = [120, 80, 250];
const total = prices.reduce((sum, price) => sum + price, 0);
Группировка объектов
Аккумулятором может быть объект. В примере товары собираются по категориям; на каждом шаге возвращается тот же объект после обновления.
const grouped = products.reduce((result, product) => {
const key = product.category;
result[key] ??= [];
result[key].push(product);
return result;
}, {});
Когда выбрать другой метод
Для простого преобразования понятнее map, для отбора — filter, для проверки — some или every. reduce полезен, когда задача действительно заключается в накоплении результата.
Частые ошибки
- Нет начального значения.
- Callback ничего не возвращает.
- Reduce используется вместо понятного map.
- Аккумулятор меняет внешние переменные.
Практика
Посчитай общую длительность массива уроков, затем собери объект, где ключ — уровень курса, а значение — количество уроков этого уровня.