Neben Arrays und Objekten kennt JavaScript zwei weitere Sammlungen: Map (Schlüssel → Wert) und Set (Menge ohne Duplikate).
Set
Ein Set speichert jeden Wert höchstens einmal:
Eingabe (optional)
Ergebnis
Ausgabe
Set(3) { 1, 2, 3 } 3
true false
[ 2, 3, 4 ]
mispMengenoperationen
Eingabe (optional)
Ergebnis
Ausgabe
[ 3, 4 ] [ 1, 2, 3, 4, 5 ] [ 1, 2 ]
Map
Eine Map speichert Schlüssel-Wert-Paare. Anders als bei Objekten darf jeder Wert Schlüssel sein (Zahlen, Objekte, Funktionen) und die Einfügereihenfolge bleibt erhalten:
Eingabe (optional)
Ergebnis
Ausgabe
1 zwei ja undefined
3 true
a -> 1
true -> ja
[ 'a', true ] [ 1, 'ja' ]
{ x: 10, y: 20 } Map(1) { 'a' => 1 }Map oder Objekt?
| Objekt | Map | |
|---|---|---|
| Schlüsseltypen | Text und Symbole | beliebig |
| Reihenfolge | meist Einfügereihenfolge | garantiert Einfügereihenfolge |
| Größe | manuell (Object.keys(o).length) | .size |
| Häufiges Hinzufügen/Löschen | langsamer | optimiert |
| JSON | direkt | Umwandlung nötig |
Für feste Datensätze ({ name, alter }) nimmst du Objekte, für dynamische Tabellen oder Zähler eine Map.
Zähler mit Map
Eingabe (optional)
Ergebnis
Ausgabe
[ [ 'das', 2 ], [ 'ist', 2 ] ]
Map(2) { 'ungerade' => [ 1, 3 ], 'gerade' => [ 2, 4 ] }Objekte als Schlüssel
Eingabe (optional)
Ergebnis
Ausgabe
Daten undefined
WeakMap und WeakSet
WeakMap und WeakSet halten Objekte nur schwach: Wird das Objekt sonst nirgends benutzt, räumt der Speicher-Aufräumer es weg. Sie eignen sich für Zusatzdaten zu Objekten, ohne Speicherlecks zu verursachen. Man kann sie nicht durchlaufen.
Eingabe (optional)
Ergebnis
Ausgabe
100
Übung
Übung mit Autokorrektur
Lies eine Zeile mit Zahlen und ein Wort. Gib in der ersten Zeile die Zahlen ohne Duplikate aus (Reihenfolge des ersten Auftretens, mit Leerzeichen getrennt). Gib in der zweiten Zeile aus, wie oft jedes Zeichen des Wortes vorkommt, im Format b=1 a=2 n=2 e=1 (Reihenfolge des ersten Auftretens).
Merke
Set: Menge ohne Duplikate (add,has,delete,size)Map: Schlüssel-Wert mit beliebigen Schlüsseln, behält die Reihenfolge- Duplikate entfernen:
[...new Set(array)] WeakMap/WeakSet: schwache Verweise ohne Speicherlecks- Mit Maps kannst du Zähler und Gruppierungen sauber bauen
Aufgabe
Entferne Duplikate aus [3, 1, 3, 2, 1] mit einem Set und zähle, wie oft jedes Zeichen in "banane" vorkommt, mit einer Map.