Start · Sprachen · JavaScript · Referenz · Map.prototype.entries()

Map.prototype.entries()

Methode

Gibt einen neuen Map-Iterator zurück, der für jedes Element der Map ein <code>[key, value]</code>-Paar in Einfügereihenfolge liefert.

seit JavaScript ES2015 Kategorie: method-property

Signatur

Map.prototype.entries()

Beschreibung

entries() gibt ein neues Map-Iterator-Objekt zurück. Es liefert für jeden Eintrag der Map ein zweielementiges Array [key, value]. Die Reihenfolge entspricht immer der Einfügereihenfolge. Das unterscheidet Maps von einfachen Objekten, bei denen ganzzahlige Schlüssel vorgezogen werden.

Die Methode ist identisch mit Map.prototype[Symbol.iterator]. Deshalb liefern for (const [k, v] of map) und for (const [k, v] of map.entries()) dasselbe Ergebnis. Ausdrücklich braucht man entries() vor allem, wenn man den Iterator von Hand mit next() weiterschalten möchte oder im Code deutlich machen will, dass man Schlüssel-Wert-Paare verarbeitet.

Typische Einsatzfälle sind: eine Map mit Object.fromEntries() in ein normales Objekt umwandeln, eine Map über den Spread-Operator in ein Array verwandeln (etwa zum Sortieren oder Filtern) oder eine Map kopieren bzw. umbauen.

Der Iterator ist live: Einträge, die während des Durchlaufs hinzukommen, werden noch besucht. Gelöschte Einträge, die noch nicht besucht wurden, werden übersprungen.

Rückgabewert

Typ
MapIterator<[K, V]>
Beschreibung
Ein neues, iterierbares Iterator-Objekt. Jeder Aufruf von next() gibt { value: [key, value], done: false } zurück, am Ende { value: undefined, done: true }.

Beispiele

Iterator von Hand mit next() weiterschalten

const farben = new Map([
  ['rot', '#f00'],
  ['grün', '#0f0'],
]);

const it = farben.entries();
console.log(it.next().value);
console.log(it.next().value);
console.log(it.next().done);
[ 'rot', '#f00' ] [ 'grün', '#0f0' ] true

Destrukturierung in for...of

const lagerbestand = new Map([
  ['Äpfel', 12],
  ['Birnen', 0],
  ['Kirschen', 40],
]);

for (const [artikel, menge] of lagerbestand.entries()) {
  if (menge === 0) console.log(`${artikel} nachbestellen!`);
}
Birnen nachbestellen!

Map in ein Objekt umwandeln (z. B. für JSON)

const einstellungen = new Map([
  ['theme', 'dark'],
  ['sprache', 'de'],
]);

const obj = Object.fromEntries(einstellungen.entries());
console.log(JSON.stringify(obj));
{"theme":"dark","sprache":"de"}

Map nach Wert sortieren

const punkte = new Map([
  ['Anna', 72],
  ['Ben', 95],
  ['Clara', 88],
]);

const sortiert = new Map(
  [...punkte.entries()].sort(([, a], [, b]) => b - a)
);
console.log([...sortiert.keys()]);
[ 'Ben', 'Clara', 'Anna' ]

// Wichtig · Fallstricke

  • Der Iterator lässt sich nur einmal durchlaufen. Danach ist er erschöpft und liefert nichts mehr. Für einen weiteren Durchlauf rufen Sie entries() erneut auf.
  • Der Rückgabewert ist kein Array. Methoden wie map() oder filter() stehen nur über [...map.entries()] bzw. Array.from() zur Verfügung. In neueren Umgebungen gibt es dafür auch Iterator-Hilfsmethoden (ES2025, z. B. map.entries().filter(...)). Diese werden noch nicht überall unterstützt.
  • Der Iterator ist live: Wenn Sie während des Durchlaufs Einträge hinzufügen, kann eine Endlosschleife entstehen.
  • entries() gibt dieselbe Funktion zurück wie map[Symbol.iterator]. map.entries() ist also meist überflüssig, wenn Sie direkt mit for...of über die Map laufen.
  • JSON.stringify(map) ergibt {}. Wandeln Sie die Map vorher mit Object.fromEntries(map.entries()) um. Das funktioniert aber nur sinnvoll mit String-Schlüsseln.
  • Wird die Methode auf etwas aufgerufen, das keine Map ist, wirft sie einen TypeError. Beispiel: Map.prototype.entries.call({}).
  • Kompatibilität: Die Methode ist seit ES2015 in allen modernen Browsern und in Node.js verfügbar.