Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 2 von 422/32 im Kurs~12 min
Lektionen des Moduls (2/4)

reduce

reduce ist die mächtigste der funktionalen Array-Methoden: Sie durchläuft das Array und führt dabei einen Akkumulator mit sich, der bei jedem Schritt aktualisiert wird. Am Ende des Durchlaufs wird der Akkumulator zurückgegeben.

Signatur

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc startet bei valoreIniziale.
  • Für jedes Element wird ein neuer acc-Wert berechnet.
  • Das Endergebnis ist der letzte acc-Wert.

Einfache Beispiele: Summe und Produkt

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

Ohne einen Startwert beginnt reduce mit dem ersten Element (riskant bei potenziell leeren Arrays → Fehler). Übergib immer einen Startwert, wenn möglich.

Ein Objekt aufbauen: Zählen von Häufigkeiten

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 }

Maximum / Minimum finden

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

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

(In der Praxis bevorzugt man für max/min Math.max(...nums); dies ist ein didaktisches Beispiel.)

Probier es aus

Übung#js.m6.l2.e1
Versuche: 0Wird geladen…

Definiere `total(items)`: Du erhältst ein Array von Objekten der Form { price, quantity } und gibst die Gesamtsumme (Summe aus price*quantity) zurück. Verwende reduce.

Editor wird geladen…
Hinweis anzeigen

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

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#js.m6.l2.e2
Versuche: 0Wird geladen…

Definiere `count(words)`: Berechne für ein gegebenes Array von Strings ein Objekt, das jeden String auf die Anzahl seiner Vorkommen abbildet. Verwende reduce mit einem Objekt als Akkumulator.

Editor wird geladen…
Hinweis anzeigen

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

Lösung nach 3 Versuchen verfügbar