reduce în JavaScript

Tablouri (array) ES5 (toate browserele moderne)

Combină toate elementele unui tablou într-o singură valoare: o sumă, un obiect, un text.

Sintaxă
tablou.reduce((acumulator, element) => valoareNoua, valoareInitiala)

Ce face reduce

reduce parcurge tabloul și păstrează un acumulator. La fiecare element, funcția primește acumulatorul și elementul curent și returnează noua valoare a acumulatorului. La final primești ultima valoare.

Al doilea parametru, valoarea inițială, este pus în acumulator la început. Dă-l mereu: fără el, un tablou gol produce eroare.

Parametri

Parametru Descriere
acumulator Rezultatul adunat până acum.
element Elementul curent.
valoareInitiala Valoarea de pornire a acumulatorului, de exemplu 0 pentru o sumă sau {} pentru un obiect.

Ce returnează

Valoarea finală a acumulatorului.

Exemple

Exemplul 1: Suma elementelor

const vanzari = [120, 80, 300, 50];
const total = vanzari.reduce((suma, v) => suma + v, 0);

console.log(total);

Rezultat

550

Exemplul 2: Totalul unui coș de cumpărături

const cos = [
  { produs: "Carte", pret: 45, bucati: 2 },
  { produs: "Pix", pret: 5, bucati: 10 },
];

const total = cos.reduce((suma, linie) => suma + linie.pret * linie.bucati, 0);
console.log(`${total} lei`);

Rezultat

140 lei

Exemplul 3: Numărarea aparițiilor

const voturi = ["da", "nu", "da", "da", "abținere"];

const rezultat = voturi.reduce((numaratoare, vot) => {
  numaratoare[vot] = (numaratoare[vot] || 0) + 1;
  return numaratoare;
}, {});

console.log(rezultat);

Rezultat

{ da: 3, nu: 1, 'abținere': 1 }

Greșeli frecvente

  • Uiți valoarea inițială pe un tablou gol: [].reduce((a, b) => a + b) dă TypeError: Reduce of empty array with no initial value.
  • Uiți return în funcția cu acolade și acumulatorul devine undefined după primul pas.

Comenzi înrudite

  • map: Creează un tablou nou, transformând fiecare element cu o funcție.
  • filter: Creează un tablou nou doar cu elementele care îndeplinesc o condiție.
  • forEach: Rulează o funcție pentru fiecare element dintr-un tablou.