Technik

Warum JavaScript trotz Arrays und Objekten Map und Set braucht

Wer JavaScript lernt, stolpert früher oder später über dieselbe Frage: Wozu gibt es Map und Set, wenn Arrays und Objekte längst da sind? Die kurze Antwort: Weil Arrays und Objekte viele Jobs erledigen können, aber nicht jeden gut.

Map und Set sind keine exotischen Extras. Sie schließen Lücken, die im Alltag schnell teuer werden. Bei Lesbarkeit. Bei Performance. Und bei der Frage, was ein Datenmodell eigentlich ausdrücken soll.

Arrays sind Listen. Keine Nachschlagetabellen.

Ein Array ist stark, wenn Reihenfolge wichtig ist. Etwa bei Einträgen, UI-Listen oder Datensätzen, die nacheinander verarbeitet werden. Sobald ein Array aber als Nachschlagewerk missbraucht wird, wird es zäh.

Ein typischer Fall: Man hat eine Liste von Objekten und will ständig prüfen, ob ein Wert schon vorkommt. Viele lösen das erst mit filter, find, includes oder einer Mischung daraus. Das funktioniert. Es ist aber oft unnötig umständlich.

Genau da kommt Set ins Spiel. Ein Set steht für eine Sammlung eindeutiger Werte. Keine Dubletten. Diese Regel ist eingebaut. Man muss sie nicht jedes Mal neu programmieren.

const ids = new Set(); ids.add(1); ids.add(1); ids.add(2);  console.log(ids); // Set { 1, 2 }

Wer mit Arrays arbeitet, baut diese Logik oft selbst nach. Das bläht Code auf. Und es verschleiert die Absicht. Ein Set sagt sofort: Hier geht es um Einzigartigkeit.

Objekte sehen aus wie Maps. Sind aber etwas anderes.

Viele JavaScript-Entwickler haben sich lange mit Objekten als Wörterbuch beholfen:

const users = {   alice: { active: true },   bob: { active: false } };

Das ist bequem. Aber ein Objekt ist in JavaScript zuerst ein Objekt. Kein reiner Key-Value-Store. Es bringt Eigenschaften, Prototypen und Eigenheiten mit, die man als Hash-Map oft gar nicht haben will.

Map ist genau für diesen Zweck gebaut: Schlüssel zu Werten speichern.

const users = new Map(); users.set('alice', { active: true }); users.set('bob', { active: false });  console.log(users.get('alice'));

Der Unterschied ist größer, als er auf den ersten Blick aussieht.

Was Map besser macht

1. Beliebige Schlüssel
Objekte nutzen Eigenschaftsnamen. In der Praxis sind das Strings oder Symbole. Map kann dagegen fast alles als Schlüssel verwenden, auch Objekte.

const cache = new Map(); const config = { lang: 'de' };  cache.set(config, 'geladen'); console.log(cache.get(config)); // 'geladen'

Das ist für Caches, Memoization oder Zuordnungen zwischen Objekten sehr nützlich. Mit einem normalen Objekt wird das schnell hakelig.

2. Sauberere Semantik
Wer Map liest, weiß sofort: Das ist eine Zuordnungstabelle. Wer ein Objekt liest, weiß das nicht. Es kann ein Datenmodell sein. Oder Konfiguration. Oder eben missbrauchte Map. Diese Klarheit spart Zeit im Team.

3. Bequemere API
set(), get(), has(), delete(), size: Die API von Map ist direkt auf den Anwendungsfall zugeschnitten. Bei Objekten hantiert man oft mit Hilfskonstruktionen wie Object.keys() oder Sonderfällen bei Existenzprüfungen.

4. Reihenfolge bleibt erhalten
Map speichert Einträge in Einfügereihenfolge. Das macht Iteration berechenbarer. Gerade bei Datenpipelines oder UI-Zuständen ist das angenehm.

Was Set besser macht

1. Doppelte Werte sind automatisch raus
Das ist der Hauptgrund. Wer aus einem Array eindeutige Werte ziehen will, ist mit Set oft schneller am Ziel.

const values = [1, 2, 2, 3, 3, 3]; const unique = [...new Set(values)];  console.log(unique); // [1, 2, 3]

2. Membership-Checks werden klarer
Wenn es nur darum geht, ob ein Wert enthalten ist, wirkt ein Set ehrlicher als ein Array. Ein Array sagt: Das ist eine Liste. Ein Set sagt: Diese Werte gehören dazu oder eben nicht.

3. Weniger Bastellogik
Deduplizierung, Whitelists, Blacklists, bereits gesehene IDs, aktive Features: Das sind klassische Set-Fälle. Viele Teams lösen das erst mit Arrays und merken später, dass sie eine Datenstruktur mit eingebauter Regel gebraucht hätten.

Es geht auch um Performance. Aber nicht als Ausrede.

Bei der Frage nach Map und Set landet man schnell bei Laufzeiten. Nachschlagen in Hash-Strukturen gilt im Schnitt als sehr schnell. Suchen in Arrays wird mit wachsender Datenmenge teurer, weil oft durchlaufen werden muss.

Das ist ein echter Vorteil. Aber man sollte ihn nicht als Reflex benutzen. Wer fünf Einträge verwaltet, muss kein Architekturtheater aufführen. Der größere Punkt ist meist der Code selbst: Welche Struktur passt zur Aufgabe?

Wenn eine Liste angezeigt und sortiert wird, ist ein Array richtig. Wenn eindeutige Werte verwaltet werden, passt ein Set. Wenn Schlüssel auf Werte zeigen sollen, ist Map meist präziser als ein Objekt.

Performance folgt oft aus dieser sauberen Wahl ganz von allein.

Wo Arrays und Objekte weiter reichen

Trotzdem gilt: Map und Set ersetzen Arrays und Objekte nicht.

Arrays bleiben Standard für geordnete Sammlungen. Fast alles in Frontends, APIs und UI-Komponenten arbeitet mit Listen. Methoden wie map(), filter() und reduce() machen Arrays extrem praktisch.

Objekte bleiben der normale Weg, um strukturierte Daten zu modellieren. Ein User mit name, email und role ist ein Objekt, keine Map.

Der Fehler liegt nicht darin, Arrays oder Objekte zu benutzen. Der Fehler beginnt, wenn sie für etwas herhalten müssen, wofür es längst die bessere Struktur gibt.

Die praktische Regel für den Alltag

Man kann es simpel halten:

  • Array, wenn Reihenfolge und Iteration zählen
  • Object, wenn ein Ding mit benannten Eigenschaften modelliert wird
  • Set, wenn Werte eindeutig sein sollen
  • Map, wenn Schlüssel auf Werte zeigen und genau das der Zweck ist

Viele JavaScript-Probleme werden nicht durch mehr Logik gelöst, sondern durch die passendere Datenstruktur. Map und Set sind genau deshalb wichtig. Sie machen Code nicht schicker. Sie machen ihn ehrlicher.