← Все вопросы

Как сложить все числа в массиве в JavaScript через reduce?

Задан 29 месяцев назад832 просмотров2 ответа
9

Нужно посчитать сумму чисел в массиве. Через цикл умею, но все советуют reduce — а я в нём путаюсь, что за аккумулятор и начальное значение. Объясните как сложить элементы массива через reduce понятно?

2 ответа

15
✓ Принятый ответ — помог автору

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
5

Если нужна только сумма чисел и не хочется возиться с reduce — это нормально, цикл тоже ок:

const nums = [10, 20, 30];
let sum = 0;
for (const n of nums) sum += n;
console.log(sum); // 60

reduce сильнее блистает, когда сворачиваешь в объект или более сложную структуру. Для простой суммы выбирай, что читаемее в твоём коде.

Ваш ответ

Войдите, чтобы ответить на вопрос.