Das globale Objekt: Map

Eine Map ist eine Sammlung von Schlüssel-Wert-Paaren (Key-Value Pairs). Sie ähnelt einem herkömmlichen JavaScript-Objekt ({}), hat aber einige entscheidende Vorteile und Unterschiede.

Der Hauptunterschied zu normalen Objekten

Bei einem normalen Objekt dürfen die Schlüssel (Keys) fast immer nur Strings (oder Symbols) sein. Bei einer Map kann ein Schlüssel jeden beliebigen Datentyp haben: Strings, Zahlen, Booleans, Arrays und sogar andere Objekte oder Funktionen! Zudem merkt sich eine Map immer die Reihenfolge des Einfügens und es ist performanter als Object.

Wichtige Methoden und Eigenschaften (Die "Befehle")

Um mit einer Map zu arbeiten, nutzt man eingebaute Methoden:

Beispiel 1:

Die Grundlagen (Erstellen, Hinzufügen, Auslesen) Hier siehst du, wie einfach man Daten speichert und wieder abruft:

// 1. Eine neue Map erstellen
const benutzerRollen = new Map();

// 2. Werte hinzufügen (.set)
benutzerRollen.set('Anna', 'Admin');
benutzerRollen.set('Ben', 'Editor');
benutzerRollen.set('Clara', 'Abonnent');

// 3. Werte auslesen (.get)
console.log(benutzerRollen.get('Anna')); // Ausgabe: "Admin"

// 4. Prüfen, ob ein Schlüssel existiert (.has)
console.log(benutzerRollen.has('Ben'));   // Ausgabe: true
console.log(benutzerRollen.has('Max'));   // Ausgabe: false

// 5. Die Größe abfragen (.size)
console.log(benutzerRollen.size);        // Ausgabe: 3

Beispiel 2: Das "Superfeature" –

Komplexe Datentypen als Schlüssel In normalen Objekten unmöglich, mit Map ein Kinderspiel: Wir nutzen ein ganzes Objekt als Schlüssel.

const userObjekt = { id: 101, name: 'Erika' };
const loginZeiten = new Map();

// Wir verknüpfen das Objekt direkt mit einem Wert (einem Datum)
loginZeiten.set(userObjekt, new Date());

// Auslesen funktioniert, indem wir das Objekt als Schlüssel übergeben
console.log(loginZeiten.get(userObjekt)); // Ausgabe: Das aktuelle Datum/Uhrzeit

Beispiel 3: Durch eine Map iterieren (Schleifen)

Da eine Map die Reihenfolge speichert, kann man wunderbar mit einer for...of-Schleife durch sie hindurchgehen.

const hauptstaedte = new Map([
    ['Deutschland', 'Berlin'],
    ['Frankreich', 'Paris'],
    ['Spanien', 'Madrid']
]);

// Direkt über Schlüssel und Wert iterieren (Destructuring)
for (const [land, stadt] of hauptstaedte) {
    console.log(`Die Hauptstadt von ${land} ist ${stadt}.`);
}
// Ausgabe:
// Die Hauptstadt von Deutschland ist Berlin.
// Die Hauptstadt von Frankreich ist Paris.
// Die Hauptstadt von Spanien ist Madrid.

Beispiel 4: Nur Schlüssel oder Wert iterieren

Will man nur die Schlüssel einer Map ermitteln, kann man die Methode keys() einsetzen.

const benutzerRollen = new Map([
    ['Anna', 'Admin'],
    ['Ben', 'Editor']
]);

// Wir wollen nur wissen, WER im System ist, nicht welche Rolle sie haben
for (const name of benutzerRollen.keys()) {
    console.log(`Benutzer: ${name}`);
}

Will man nur die Werte ermitteln nutzt man values()

for (const rolle of benutzerRollen.values()) {
    console.log(`Rolle: ${rolle}`);
}