Как сложить все числа в массиве в JavaScript через reduce?
Нужно посчитать сумму чисел в массиве. Через цикл умею, но все советуют reduce — а я в нём путаюсь, что за аккумулятор и начальное значение. Объясните как сложить элементы массива через reduce понятно?
2 ответа
reduce «сворачивает» массив в одно значение. У колбэка два главных аргумента: аккумулятор (накопленный результат) и текущий элемент.
const nums = [10, 20, 30];
const sum = nums.reduce((acc, n) => acc + n, 0);
console.log(sum); // 60
Разберём по шагам (начальное значение 0):
- старт: acc = 0
- шаг 1: acc = 0 + 10 = 10
- шаг 2: acc = 10 + 20 = 30
- шаг 3: acc = 30 + 30 = 60
Второй аргумент 0 — это начальное значение аккумулятора. Его почти всегда стоит указывать.
Частая ошибка — забыть начальное значение. Тогда reduce возьмёт за старт первый элемент, и на пустом массиве упадёт с ошибкой:
[].reduce((a, b) => a + b); // TypeError: Reduce of empty array with no initial value
[].reduce((a, b) => a + b, 0); // 0 — безопасно
reduce умеет не только суммы. Например, максимум:
const max = [3, 7, 2, 9, 4].reduce((m, n) => Math.max(m, n), -Infinity);
console.log(max); // 9
Или подсчёт по полю объектов:
const orders = [{ sum: 100 }, { sum: 250 }, { sum: 50 }];
const total = orders.reduce((acc, o) => acc + o.sum, 0);
console.log(total); // 400
Если нужна только сумма чисел и не хочется возиться с reduce — это нормально, цикл тоже ок:
const nums = [10, 20, 30];
let sum = 0;
for (const n of nums) sum += n;
console.log(sum); // 60
reduce сильнее блистает, когда сворачиваешь в объект или более сложную структуру. Для простой суммы выбирай, что читаемее в твоём коде.