Direct naar de hoofdinhoud
Module 6 · Les 2 van 422/32 in de cursus~12 min
Modulelessen (2/4)

verminderen

reduce is de krachtigste van de functionele arraymethoden: het loopt door de collectie het bijhouden van een accumulator die bij elke stap wordt bijgewerkt. Wanneer de lus voorbij is, wordt de accumulator.

Handtekening

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc begint om valoreIniziale.
  • Voor elk element wordt een nieuwe acc berekend.
  • Het eindresultaat is de laatste acc.

Basisvoorbeelden: som en product

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

Zonder initiële waarde begint reduce vanaf het eerste element (riskant bij mogelijk leeg arrays → fout). Geef altijd een beginwaarde door als dat mogelijk is.

Een object bouwen: tellen

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 }

Max/min vinden

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

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

(In de praktijk geeft u voor max/min de voorkeur aan Math.max(...nums); dit is een didactisch voorbeeld.)

Probeer het

Oefening#js.m6.l2.e1
Pogingen: 0Laden…

Definieer `totaal(items)`: u ontvangt een reeks objecten { prijs, hoeveelheid } en retourneert de totale uitgaven (som van prijs*hoeveelheid). Gebruik verminderen.

Editor laden…
Toon hint

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

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#js.m6.l2.e2
Pogingen: 0Laden…

Definieer `count(words)`: geef, gegeven een array van strings, een object terug dat elke string toewijst aan het aantal keren dat het voorkomt. Gebruik reduceren met een objectaccumulator.

Editor laden…
Toon hint

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

Oplossing beschikbaar na 3 pogingen