Start · Sprachen · JavaScript · Referenz · new Map()

new Map()

Methode

Der <code>Map()</code>-Konstruktor erzeugt ein neues <code>Map</code>-Objekt, optional vorbefüllt mit Schlüssel-Wert-Paaren aus einem iterierbaren Objekt.

seit JavaScript ES2015 Kategorie: method-property

Signatur

new Map(iterable)

Beschreibung

Mit new Map() legst du eine Map an. Das ist eine Sammlung von Schlüssel-Wert-Paaren, bei der die Einfügereihenfolge erhalten bleibt und beliebige Werte als Schlüssel dienen können, also auch Objekte, Funktionen oder NaN. Anders als bei einfachen Objekten gibt es keine geerbten Schlüssel aus dem Prototyp, und die Größe liest du direkt über size ab.

Optional übergibst du ein iterierbares Objekt, dessen Elemente selbst Schlüssel-Wert-Paare sind, zum Beispiel ein Array aus zweielementigen Arrays wie [[key, value], ...], eine andere Map oder das Ergebnis von Object.entries(). Jedes Paar wird intern über set() eingefügt. Taucht ein Schlüssel mehrfach auf, gewinnt der letzte Wert.

Eine Map eignet sich besonders für Caches, Zuordnungen von DOM-Knoten oder Objekten zu Metadaten, Zähler und alle Fälle mit häufigem Hinzufügen und Entfernen. Für reine, serialisierbare Konfigurationsdaten mit String-Schlüsseln sind einfache Objekte oft praktischer.

Parameter

Name Typ Default Beschreibung
$iterable Iterable<[any, any]> | null | undefined undefined Iterierbares Objekt (z. B. Array, Map, Generator), dessen Elemente Schlüssel-Wert-Paare in der Form [key, value] sind. Bei null oder undefined entsteht eine leere Map.

Rückgabewert

Typ
Map
Beschreibung
Ein neues Map-Objekt, das die übergebenen Paare in Einfügereihenfolge enthält.

Beispiele

Leere Map anlegen und befüllen

const preise = new Map();
preise.set('Apfel', 0.5).set('Birne', 0.8);

console.log(preise.size);
console.log(preise.get('Birne'));
2 0.8

Map aus Array-Paaren und aus Objekt erzeugen

const status = new Map([
  [200, 'OK'],
  [404, 'Not Found'],
  [500, 'Internal Server Error']
]);
console.log(status.get(404));

const config = { host: 'localhost', port: 8080 };
const configMap = new Map(Object.entries(config));
console.log([...configMap.keys()]);
Not Found [ 'host', 'port' ]

Objekte als Schlüssel – Metadaten-Cache

const cache = new Map();

const ladeNutzer = async (user) => {
  if (cache.has(user)) return cache.get(user);
  const daten = await Promise.resolve({ name: user.name, geladen: Date.now() });
  cache.set(user, daten);
  return daten;
};

const alice = { name: 'Alice' };
await ladeNutzer(alice);
console.log(cache.has(alice), cache.has({ name: 'Alice' }));
true false

Map kopieren (flache Kopie)

const original = new Map([['a', 1], ['b', 2]]);
const kopie = new Map(original);
kopie.set('c', 3);

console.log(original.size, kopie.size);
2 3

// Wichtig · Fallstricke

  • Nur mit new aufrufen: Map() ohne new wirft einen TypeError.
  • Jedes Element des Iterables muss ein Objekt sein. new Map([1, 2]) wirft einen TypeError. Bei new Map(['ab']) werden die Indizes 0 und 1 gelesen, sodass 'a' → 'b' entsteht. Das ist meist ungewollt.
  • Ein einfaches Objekt ist nicht iterierbar: new Map({ a: 1 }) schlägt fehl. Verwende stattdessen new Map(Object.entries(obj)). Für den Rückweg gibt es Object.fromEntries(map).
  • Schlüssel werden per SameValueZero verglichen: NaN ist gleich NaN, Objekte gelten nur bei identischer Referenz als gleich.
  • Das Kopieren per new Map(andereMap) ist flach: Objekt-Werte werden nicht geklont.
  • JSON.stringify(map) liefert {}. Zum Serialisieren wandle die Map vorher um, etwa mit [...map] oder Object.fromEntries(map).
  • Die Map hält starke Referenzen auf ihre Schlüssel und kann so Speicherlecks verursachen. Für Objekt-Metadaten ohne Lebenszeitbindung ist WeakMap die bessere Wahl.
  • Kompatibilität: Map wird in allen modernen Browsern und seit Node.js 0.12 unterstützt.