Signatur
Beschreibung
Die Methode keys() gibt einen Map-Iterator zurück, der die Schlüssel der Map nacheinander liefert, und zwar in der Reihenfolge, in der sie eingefügt wurden. Die Werte sind nicht enthalten. Wenn du nur die Werte brauchst, nimm values(), für Schlüssel-Wert-Paare entries().
Der Iterator ist gleichzeitig ein Iterable. Du kannst ihn deshalb direkt in for...of-Schleifen, mit der Spread-Syntax ([...map.keys()]) oder mit Array.from() verwenden. Seit ES2025 erbt er von Iterator.prototype und bietet damit auch Hilfsmethoden wie map(), filter() und toArray().
Der Iterator liest die Daten verzögert (lazy): Er erstellt keine Kopie, sondern greift live auf die Map zu. Schlüssel, die während der Iteration hinzukommen, werden noch geliefert, sofern der Iterator sie noch nicht passiert hat. Gelöschte Schlüssel, die noch nicht besucht wurden, werden übersprungen. Ein Iterator lässt sich nur einmal durchlaufen. Danach ist er erschöpft.
Rückgabewert
Beispiele
Schlüssel mit next() und for...of durchlaufen
const preise = new Map([
['apfel', 1.2],
['birne', 0.9],
['kiwi', 0.5]
]);
const it = preise.keys();
console.log(it.next()); // erster Schlüssel
// Der Rest mit for...of
for (const key of it) {
console.log(key);
}
console.log(it.next()); // erschöpft
Schlüssel als Array für Sortierung oder JSON
const benutzer = new Map([
['zoe', { alter: 31 }],
['anna', { alter: 25 }],
['max', { alter: 40 }]
]);
const namen = [...benutzer.keys()].sort();
console.log(namen);
console.log(JSON.stringify(Array.from(benutzer.keys())));
Objekte als Schlüssel: DOM-Elemente auflisten
const btnA = { id: 'speichern' };
const btnB = { id: 'abbrechen' };
const klicks = new Map([[btnA, 3], [btnB, 1]]);
// Schlüssel sind hier Objekte, nicht Strings
const ids = Array.from(klicks.keys(), (el) => el.id);
console.log(ids);
Iterator-Hilfsmethoden (ES2025)
const lager = new Map([['A-100', 5], ['B-200', 0], ['A-300', 12]]);
const aArtikel = lager.keys()
.filter((sku) => sku.startsWith('A-'))
.toArray();
console.log(aArtikel);
// Wichtig · Fallstricke
- Kein Array: Der Rückgabewert ist ein Iterator.
map.keys().lengthergibtundefined, undmap.keys()[0]funktioniert nicht. Für die Anzahl nimmst dumap.size, für einen Indexzugriff wandelst du den Iterator vorher mit[...map.keys()]um. - Nur einmal verwendbar: Ein erschöpfter Iterator liefert nichts mehr. Für einen weiteren Durchlauf rufst du
keys()erneut auf. - Live-Verhalten: Wenn du die Map während der Iteration veränderst (
set/delete), wirkt sich das auf den laufenden Iterator aus. Neue Schlüssel können eine Endlosschleife auslösen, wenn du in der Schleife ständig neue hinzufügst. - Im Unterschied zu
Object.keys()behalten Map-Schlüssel ihren Typ, zum Beispiel Zahlen, Objekte oderNaN. Sie werden nicht in Strings umgewandelt. - Iterator-Hilfsmethoden wie
filter()undtoArray()gibt es erst in neueren Umgebungen (ES2025, Chrome 122+, Firefox 131+, Safari 18.4+, Node.js 22+).keys()selbst wird von allen modernen Browsern unterstützt. - Wenn du die Methode mit einem
thisaufrufst, das keine Map ist, wird einTypeErrorausgelöst.