Модульні уроки (2/4)
зменшити
reduce є найпотужнішим із функціональних методів масиву: він проходить по колекції
ведення акумулятора, який оновлюється на кожному кроці. Коли цикл закінчується, він повертає
акумулятор.
Підпис
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);accпочинається оvaloreIniziale.- Для кожного елемента обчислюється новий
acc. - Остаточним результатом є останній
acc.
Основні приклади: сума і добуток
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 починається з першого елемента (небезпечно для потенційно порожнього
масиви → помилка). Завжди передавайте початкове значення, якщо це можливо.
Побудова предмета: рахунок
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 }Знаходження макс./мін
const nums = [3, 7, 1, 9, 4];
const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9(На практиці для max/min віддають перевагу Math.max(...nums); це дидактичний приклад.)
Спробуйте
Визначте `total(items)`: ви отримуєте масив об’єктів { price, quantity } і повертаєте загальні витрати (сума ціна*кількість). Використовуйте зменшити.
Показати підказку
зменшити ((a, it) => a + it.price * it.quantity, 0)
Рішення доступне після 3 спроб
Повторна вправа
Визначте `count(words)`: задано масив рядків, поверніть об’єкт, який відображає кожен рядок на кількість входжень. Використовуйте зменшити з накопичувачем об’єктів.
Показати підказку
acc[p] = (acc[p] ?? 0) + 1; повернути акс;
Рішення доступне після 3 спроб