In diesem Artikel werden wir uns mit zwei wichtigen Methoden aus dem JavaScript-Standardbibliothek befassen: filter()
und reduce()
. Diese Funktionen sind sehr nützlich, um komplexe Datenstrukturen zu verarbeiten und Informationen daraus extrahieren.
JavaScript: Was ist Filter?
Die Methode filter()
wird verwendet, um eine neue Array-Instanz zurückzugeben, die nur die Elemente enthält, die einer bestimmten Bedingung entsprechen. Die Syntax lautet wie folgt:
1 2 |
arr.filter(callback(element, index, array) { ... }) |
callback
ist eine Funktion, die für jeden Array-Element aufgerufen wird.element
ist das aktuelle Array-Element.index
ist der Index des aktuellen Array-Elements.array
ist das Original-Array.
Ein Beispiel:
1 2 3 4 5 |
const numbers = [1, 2, 3, 4, 5, 6]; const evenNumbers = numbers.filter(num => num % 2 === 0); console.log(evenNumbers); // Ausgabe: [2, 4, 6] |
JavaScript: Was ist Reduce?
Die Methode reduce()
wird verwendet, um eine neue Werteinstanz zurückzugeben, die durch das Kombinieren aller Array-Elemente entsteht. Die Syntax lautet wie folgt:
1 2 |
arr.reduce(callback(accumulator, current) { ... }, [initialValue]) |
callback
ist eine Funktion, die für jeden Array-Element aufgerufen wird.accumulator
ist der vorherige Wert.current
ist das aktuelle Array-Element.[initialValue]
ist der optionalen Initialwert.
Ein Beispiel:
1 2 3 4 5 |
const numbers = [1, 2, 3, 4, 5]; const sum = numbers.reduce((acc, current) => acc + current); console.log(sum); // Ausgabe: 15 |
Komplexe Datenstrukturen mit Filter und Reduce verarbeiten
Das folgende Beispiel zeigt, wie eine komplexe JSON-Datenstruktur (hier ein Array of Dictionaries), sehr elegant mit JS Filter und Reduce in Kombination verarbeitet werden kann, ohne mühsam über verschachtelte Strukturen zu iterieren.
Aufgabe: Berechne den Gesamtumsatz aller Produkte mit dem String “magnus” im Namen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
let produkte = { "Daten": [ { "ID": 1, "Produkt": "Magnus One Black", "Umsatz": 10000.0 }, { "ID": 2, "Produkt": "Magnus One White", "Umsatz": 15000.0 }, { "ID": 3, "Produkt": "Intel NUC", "Umsatz": 2000.0 } ] }; let sum = produkte.Daten.filter(p => p.Produkt.toLowerCase().includes("magnus")).reduce((sum, current) => sum + current.Umsatz, 0); console.log(sum); |
Die Ausgabe ist 25.000,00. Passt :-)