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:
Ergebnis
Set(3) { 1, 2, 3 } 3
true false
[ 2, 3, 4 ]
mispMengenoperationen
Ergebnis
[ 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:
Ergebnis
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
Ergebnis
[ [ 'das', 2 ], [ 'ist', 2 ] ]
Map(2) { 'ungerade' => [ 1, 3 ], 'gerade' => [ 2, 4 ] }Objekte als Schlüssel
Ergebnis
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.
Ergebnis
100
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.