Перейти до основного вмісту
Модуль 6 · Урок 2 із 422/32 у курсі~12 min
Модульні уроки (2/4)

зменшити

reduce є найпотужнішим із функціональних методів масиву: він проходить по колекції ведення акумулятора, який оновлюється на кожному кроці. Коли цикл закінчується, він повертає акумулятор.

Підпис

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc починається о valoreIniziale.
  • Для кожного елемента обчислюється новий acc.
  • Остаточним результатом є останній acc.

Основні приклади: сума і добуток

JS
const numeri = [3, 1, 4, 1, 5];

const somma = numeri.reduce((a, n) => a + n, 0);
// 14

const prodotto = numeri.reduce((a, n) => a * n, 1);
// 60

Без початкового значення reduce починається з першого елемента (небезпечно для потенційно порожнього масиви → помилка). Завжди передавайте початкове значення, якщо це можливо.

Побудова предмета: рахунок

JS
const parole = ['mela', 'pera', 'mela', 'kiwi', 'mela'];

const conteggio = parole.reduce((acc, p) => {
  acc[p] = (acc[p] ?? 0) + 1;
  return acc;
}, {});
// { mela: 3, pera: 1, kiwi: 1 }

Знаходження макс./мін

JS
const nums = [3, 7, 1, 9, 4];

const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9

(На практиці для max/min віддають перевагу Math.max(...nums); це дидактичний приклад.)

Спробуйте

вправи#js.m6.l2.e1
Спроби: 0Завантаження…

Визначте `total(items)`: ви отримуєте масив об’єктів { price, quantity } і повертаєте загальні витрати (сума ціна*кількість). Використовуйте зменшити.

Завантаження редактора…
Показати підказку

зменшити ((a, it) => a + it.price * it.quantity, 0)

Рішення доступне після 3 спроб

Повторна вправа

вправи#js.m6.l2.e2
Спроби: 0Завантаження…

Визначте `count(words)`: задано масив рядків, поверніть об’єкт, який відображає кожен рядок на кількість входжень. Використовуйте зменшити з накопичувачем об’єктів.

Завантаження редактора…
Показати підказку

acc[p] = (acc[p] ?? 0) + 1; повернути акс;

Рішення доступне після 3 спроб