Array-Methoden: map, filter, reduce und mehr
Array-Methoden: map, filter, reduce und mehr
~14 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
Die funktionalen Array-Methoden sind das mächtigste Werkzeug im täglichen JavaScript-Alltag – dieses Kapitel baut damit die komplette Auswertungslogik unseres Haushaltsbuchs.
map(): jedes Element transformieren
map() erzeugt ein NEUES Array derselben Länge, in dem JEDES Element durch das Ergebnis der Callback-Funktion ersetzt wurde:
const betraege = [2400, -850, -120];
const formatiert = betraege.map(betrag => `${betrag} EUR`);
console.log(formatiert); // ['2400 EUR', '-850 EUR', '-120 EUR']
console.log(betraege); // unverändert: [2400, -850, -120] - map() mutiert NICHTfilter(): Elemente auswählen
filter() erzeugt ein NEUES Array, das nur die Elemente enthält, für die die Callback-Funktion true zurückgibt:
const betraege = [2400, -850, -120, -60, 300];
const ausgaben = betraege.filter(betrag => betrag < 0);
console.log(ausgaben); // [-850, -120, -60]
const einnahmen = betraege.filter(betrag => betrag > 0);
console.log(einnahmen); // [2400, 300]reduce(): ein Array zu einem einzigen Wert aggregieren
reduce() ist die vielseitigste, aber auch anfangs am schwierigsten zu lesende Methode. Sie iteriert über das Array und akkumuliert dabei einen einzigen Wert – genau das, was wir für die manuelle Summierschleife aus Kapitel 10 brauchten:
const betraege = [2400, -850, -120, -60, 300, -45];
const saldo = betraege.reduce((akkumulator, betrag) => akkumulator + betrag, 0);
console.log(saldo); // 1625 - identisch zum Ergebnis der manuellen Schleife aus Kapitel 10!Der erste Parameter der Callback-Funktion (akkumulator) trägt den bisher berechneten Zwischenwert, der zweite Parameter (betrag) das aktuelle Element. Der zweite Aufruf-Parameter von reduce() selbst (hier 0) ist der STARTWERT des Akkumulators.
// Fortgeschrittenes Beispiel: Summe PRO Kategorie mit reduce()
const transaktionen = [
{ kategorie: 'Miete', betrag: -850 },
{ kategorie: 'Lebensmittel', betrag: -60 },
{ kategorie: 'Lebensmittel', betrag: -45 },
{ kategorie: 'Gehalt', betrag: 2400 },
];
const summenProKategorie = transaktionen.reduce((akkumulator, transaktion) => {
const bisher = akkumulator[transaktion.kategorie] ?? 0;
akkumulator[transaktion.kategorie] = bisher + transaktion.betrag;
return akkumulator;
}, {});
console.log(summenProKategorie);
// { Miete: -850, Lebensmittel: -105, Gehalt: 2400 }Weitere häufig gebrauchte Methoden
find(callback)– gibt das ERSTE passende Element zurück (nicht ein Array!), oderundefined.some(callback)–true, wenn MINDESTENS ein Element passt.every(callback)–true, wenn ALLE Elemente passen.sort(callback)– sortiert (ACHTUNG: mutiert das Original!), Callback gibt negativ/0/positiv zurück.forEach(callback)– wie einefor...of-Schleife, aber OHNE Rückgabewert – kein Ersatz fürmap()/filter().
const transaktionen = [
{ kategorie: 'Miete', betrag: -850 },
{ kategorie: 'Gehalt', betrag: 2400 },
];
const gehalt = transaktionen.find(t => t.kategorie === 'Gehalt');
console.log(gehalt); // { kategorie: 'Gehalt', betrag: 2400 }
const gibtGrosseAusgabe = transaktionen.some(t => t.betrag < -500);
console.log(gibtGrosseAusgabe); // true
const sortiertNachBetrag = [...transaktionen].sort((a, b) => a.betrag - b.betrag);
console.log(sortiertNachBetrag.map(t => t.betrag)); // [-850, 2400]Achtung: [...transaktionen].sort(...) nutzt bewusst den Spread-Operator (Kapitel 13), um erst eine KOPIE zu erzeugen, bevor sortiert wird – sort() mutiert sonst das Original-Array, was in unserem Fall die ursprüngliche Buchungsreihenfolge zerstören würde.
Methoden verketten: der wahre Vorteil
Der eigentliche Gewinn dieser Methoden zeigt sich beim VERKETTEN – eine einzige, gut lesbare Ausdruckskette statt mehrerer manueller Schleifen:
const transaktionen = [
{ kategorie: 'Miete', betrag: -850 },
{ kategorie: 'Lebensmittel', betrag: -60 },
{ kategorie: 'Gehalt', betrag: 2400 },
{ kategorie: 'Freizeit', betrag: -45 },
];
const summeGrosserAusgaben = transaktionen
.filter(t => t.betrag < 0)
.map(t => Math.abs(t.betrag))
.filter(betrag => betrag > 50)
.reduce((summe, betrag) => summe + betrag, 0);
console.log(summeGrosserAusgaben); // 910 - Miete (850) + Lebensmittel (60)