Vai al contenuto
eLearner.app
Modulo 6 · Lezione 2 di 422/32 nel corso~12 min
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

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc parte da valoreIniziale.
  • Per ogni elemento si calcola un nuovo acc.
  • Il risultato finale è l'ultimo acc.

Esempi base: somma e prodotto

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

Senza valore iniziale, reduce parte dal primo elemento (rischioso su array potenzialmente vuoti → errore). Passa sempre un valore iniziale quando puoi.

Costruire un oggetto: conteggio

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 }

Trovare massimo / minimo

JS
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

Esercizio#js.m6.l2.e1
Tentativi: 0Caricamento…

Definisci `total(items)`: ricevi un array di oggetti { price, quantity } e ritorni la spesa totale (somma di price*quantity). Usa reduce.

Caricamento editor…
Mostra suggerimento

reduce((a, it) => a + it.price * it.quantity, 0)

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#js.m6.l2.e2
Tentativi: 0Caricamento…

Definisci `count(words)`: dato un array di stringhe, ritorna un oggetto che mappa ogni stringa al numero di occorrenze. Usa reduce con accumulatore oggetto.

Caricamento editor…
Mostra suggerimento

acc[p] = (acc[p] ?? 0) + 1; return acc;

Soluzione disponibile dopo 3 tentativi