Lezioni del modulo (2/4)
reduce
reduce è il più potente dei metodi funzionali sugli array: percorre la collezione mantenendo
un accumulatore che viene aggiornato a ogni passo. Quando il giro è finito, restituisce
l'accumulatore.
Firma
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);accparte davaloreIniziale.- Per ogni elemento si calcola un nuovo
acc. - Il risultato finale è l'ultimo
acc.
Esempi base: somma e prodotto
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);
// 60Senza valore iniziale, reduce parte dal primo elemento (rischioso su array potenzialmente vuoti
→ errore). Passa sempre un valore iniziale quando puoi.
Costruire un oggetto: conteggio
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 }Trovare massimo / minimo
const nums = [3, 7, 1, 9, 4];
const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9(In pratica per max/min preferisci Math.max(...nums); questo è un esempio didattico.)
Prova tu
Definisci `total(items)`: ricevi un array di oggetti { price, quantity } e ritorni la spesa totale (somma di price*quantity). Usa reduce.
Mostra suggerimento
reduce((a, it) => a + it.price * it.quantity, 0)
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Definisci `count(words)`: dato un array di stringhe, ritorna un oggetto che mappa ogni stringa al numero di occorrenze. Usa reduce con accumulatore oggetto.
Mostra suggerimento
acc[p] = (acc[p] ?? 0) + 1; return acc;
Soluzione disponibile dopo 3 tentativi