Salt la conținutul principal
Modulul 6 · Lecția 2 din 422/32 în curs~12 min
Lecții din modul (2/4)

reduce

reduce este cea mai puternică dintre metodele matrice funcționale: parcurge colecția păstrarea unui acumulator care este actualizat la fiecare pas. Când bucla se termină, returnează acumulator.

Semnătura

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc începe la valoreIniziale.
  • Pentru fiecare element este calculat un nou acc.
  • Rezultatul final este ultimul acc.

Exemple de bază: sumă și produs

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

Fără o valoare inițială, reduce începe de la primul element (riscător în cazul potențial gol matrice → eroare). Trimiteți întotdeauna o valoare inițială când puteți.

Construirea unui obiect: numărarea

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 }

Găsirea max/min

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

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

(În practică pentru max/min prefer Math.max(...nums); acesta este un exemplu didactic.)

Încearcă

Exercițiu#js.m6.l2.e1
Încercări: 0Se încarcă…

Definiți `total(articole)`: primiți o serie de obiecte { preț, cantitate } și returnați cheltuielile totale (suma prețului*cantității). Utilizați reduce.

Se încarcă editorul...
Afișează indiciu

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

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#js.m6.l2.e2
Încercări: 0Se încarcă…

Definiți `count(words)`: având în vedere o matrice de șiruri, returnați un obiect care mapează fiecare șir la numărul de apariții. Utilizați reduce cu un acumulator de obiecte.

Se încarcă editorul...
Afișează indiciu

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

Soluție disponibilă după 3 încercări