Statt Schleifen schreibst du Listenverarbeitung in JavaScript meist mit Array-Methoden, die eine Funktion als Argument bekommen. Sie ändern das Original nicht und sind gut lesbar.
forEach
Ruft eine Funktion für jedes Element auf (kein Rückgabewert):
Ergebnis
0 a 1 b 2 c
map: jedes Element umwandeln
Liefert ein neues Array gleicher Länge:
Ergebnis
[ 11.899999999999999, 23.799999999999997, 35.699999999999996 ] [ 'Mia', 'Tom' ] [ 'Mia', 'Tom' ] [ 1, 2, 3 ]
filter: Elemente auswählen
Liefert nur die Elemente, für die die Funktion true ergibt:
Ergebnis
[ 2, 4, 6 ] [ 'a', 5 ] [ 'Tom' ]
reduce: alles zu einem Wert zusammenfassen
reduce((akku, element) => neuerAkku, startwert):
Ergebnis
10
4
{ a: 3, b: 1, c: 1 }Verketten (Pipelines)
Ergebnis
26
Weitere nützliche Methoden
| Methode | Wirkung |
|---|---|
flatMap(f) | map und danach ein Level flach machen |
find, findIndex, findLast | erstes/letztes passendes Element |
some, every | mindestens eins / alle erfüllen |
join(trenner) | zu Text verbinden |
Object.groupBy(arr, f) | nach Schlüssel gruppieren |
toSorted, toReversed, toSpliced, with | Kopien statt Änderung |
Ergebnis
[ 1, 2, 3 ]
[ 'Hallo', 'Welt', 'Guten', 'Tag' ]
[Object: null prototype] { ungerade: [ 1, 3, 5 ], gerade: [ 2, 4 ] }
[ 99, 1, 2 ] 1 - 2 - 3Callback-Argumente
Die übergebene Funktion bekommt bis zu drei Argumente: Element, Index und das ganze Array.
Ergebnis
[ '1/2: a', '2/2: b' ] [ 10, NaN, 2 ] [ 10, 10, 10 ]
Merke
mapwandelt um,filterwählt aus,reducefasst zusammen- Sie liefern neue Werte und ändern das Original nicht
- Pipelines aus
filter,map,reduceersetzen viele Schleifen flatMap,some,every,find,Object.groupByergänzen die Palette- Vorsicht bei
map(parseInt): das zweite Argument ist der Index
Aufgabe
Gegeben ist eine Liste von Wörtern. Bilde mit einer Pipeline die Liste aller Wörter mit mehr als drei Buchstaben in Großschreibung, sortiert.