📚Arrays und Objekte

Arrays sind geordnete Listen, Objekte Sammlungen von Schlüssel-Wert-Paaren. Die wichtigsten Array-Methoden bekommen eine Funktion (Callback) und rufen sie für jedes Element auf – hier zum Zuschauen.

🎬map, filter, reduce & Co. animiert

1[3, 1, 4, 1, 5, 9].map(x => x * 2)
Schritt 1 / 7 · Tasten ← →
Eingabe
3[0]
1[1]
4[2]
1[3]
5[4]
9[5]
Callback wartet …
Neues Array
–

Drücke „Weiter“ oder „Abspielen“.

🧰Weitere Array-Methoden

Seit ES2023 gibt es zu den verändernden Methoden sort, reverse und splice nicht-verändernde Gegenstücke (toSorted, toReversed, toSpliced, with).
MethodeBeispielErgebnis (live)verändert Original?seit
push / popconst a = [1, 2]; a.push(3); a…jaES1
slice[1, 2, 3, 4].slice(1, 3)…neinES3
spliceconst a = [1, 2, 3, 4]; a.splice(1, 2); a…jaES3
includes[1, 2, NaN].includes(NaN)…neinES2016
indexOf[1, 2, NaN].indexOf(NaN)…neinES5
flat[1, [2, [3, [4]]]].flat(Infinity)…neinES2019
flatMap["a b", "c"].flatMap(s => s.split(" "))…neinES2019
at[10, 20, 30].at(-1)…neinES2022
findLast[1, 4, 2, 5].findLast(x => x % 2 === 0)…neinES2023
sort (Achtung!)[10, 9, 1].sort()…jaES1
toSorted[10, 9, 1].toSorted((a, b) => a - b)…neinES2023
toReversed[1, 2, 3].toReversed()…neinES2023
with[1, 2, 3].with(1, 99)…neinES2023
Object.groupByObject.groupBy([1, 2, 3, 4], x => x % 2 ? "ungerade" : "gerade")…neinES2024
⚠️ sort() ohne Vergleichsfunktion sortiert als Text
[10, 9, 1].sort() ergibt [1, 10, 9], weil die Elemente als Strings verglichen werden. Für Zahlen: sort((a, b) => a - b).

🗃️Objekte, Referenzen, JSON, Map und Set

Objekte anlegen und lesen

1const key = "farbe";
2const auto = {
3 marke: "Beispiel",
4 [key]: "blau", // berechneter Schlüssel
5 hupen() { return "Tut!"; },
6};
7console.log(auto.marke, auto["farbe"], auto.hupen());
8console.log(Object.keys(auto));
9console.log("marke" in auto, auto.ps);
Konsole (echt ausgeführt)
wird ausgeführt …

Referenzen, nicht Kopien

1const a = { n: 1 };
2const b = a; // gleiche Referenz
3b.n = 99;
4console.log(a.n, a === b);
5console.log({ n: 1 } === { n: 1 });
6const tief = structuredClone({ x: { y: 1 } });
7console.log(tief);
Konsole (echt ausgeführt)
wird ausgeführt …

Variablen enthalten bei Objekten nur einen Verweis auf den Heap. === vergleicht Verweise.

JSON

1const text = JSON.stringify({ name: "Ada", tags: ["x"], nichts: undefined });
2console.log(text);
3const obj = JSON.parse(text);
4console.log(obj.tags[0]);
Konsole (echt ausgeführt)
wird ausgeführt …

Eigenschaften mit undefined (und Funktionen) lässt JSON.stringify weg.

Map und Set

1const m = new Map([["a", 1]]);
2m.set({ id: 1 }, "Objekt als Schlüssel");
3console.log(m.size, m.get("a"));
4const s = new Set([1, 2, 2, 3]);
5console.log(s.size, s.has(2), [...s]);
Konsole (echt ausgeführt)
wird ausgeführt …