Signatur
Beschreibung
Die Methode keys() gibt ein neues Set-Iterator-Objekt zurück, das die Werte eines Set in der Reihenfolge liefert, in der sie eingefügt wurden. Da ein Set keine Schlüssel-Wert-Paare kennt, sondern nur Werte speichert, ist keys() lediglich ein Alias für values(): Beide Eigenschaften zeigen auf dieselbe Funktion (Set.prototype.keys === Set.prototype.values ergibt true).
Die Methode existiert vor allem aus Gründen der Konsistenz mit Map. So lässt sich Code schreiben, der sowohl mit Map- als auch mit Set-Instanzen über keys(), values() und entries() arbeitet, ohne eine Fallunterscheidung zu brauchen.
Der zurückgegebene Iterator ist selbst iterierbar und kann daher direkt in for...of-Schleifen, mit dem Spread-Operator ([...set.keys()]), mit Array.from() oder über manuelle Aufrufe von next() genutzt werden. In lesbarem Code ist für Sets meist values() – oder direkt das Set selbst – die klarere Wahl.
Rückgabewert
next() gibt ein Objekt der Form { value, done } zurück.Beispiele
Werte eines Sets mit keys() durchlaufen
const tags = new Set(['js', 'css', 'html']);
for (const tag of tags.keys()) {
console.log(tag);
}
// keys und values sind identisch
console.log(Set.prototype.keys === Set.prototype.values);
Iterator manuell mit next() abfragen
const ids = new Set([101, 202]);
const it = ids.keys();
console.log(it.next());
console.log(it.next());
console.log(it.next());
Generische Funktion für Map und Set
// Funktioniert mit Map und Set gleichermaßen
const sortedKeys = (collection) => [...collection.keys()].sort();
const roles = new Map([['editor', 2], ['admin', 1]]);
const users = new Set(['zoe', 'anna', 'max']);
console.log(sortedKeys(roles));
console.log(sortedKeys(users));
Deduplizierte Werte in ein Array übernehmen
const emails = ['a@x.de', 'b@x.de', 'a@x.de'];
const unique = Array.from(new Set(emails).keys());
console.log(unique);
// Wichtig · Fallstricke
- Kein echter Schlüssel: Ein
Sethat keine Schlüssel.keys()liefert exakt dieselben Werte wievalues(). Wer Schlüssel-Wert-Paare braucht, sollteMapverwenden.set.entries()liefert Paare der Form[wert, wert]. - Iterator ist einmalig: Ist der Iterator einmal durchlaufen (
done: true), liefert er keine Werte mehr. Für einen neuen Durchlaufkeys()erneut aufrufen. - Live-Verhalten: Der Iterator ist an das Set gebunden. Werte, die während der Iteration hinzugefügt werden, werden noch mitgeliefert, gelöschte (noch nicht besuchte) Werte werden übersprungen. Das kann bei Veränderungen innerhalb der Schleife zu Endlosschleifen führen.
- Kein Array: Der Rückgabewert hat keine Array-Methoden wie
map()oderfilter(). Vorher mit[...]oderArray.from()umwandeln – oder in neueren Umgebungen (ES2025) die Iterator-Helfer wieset.keys().map(...)nutzen. - Kompatibilität: Wird seit ES2015 von allen modernen Browsern und von Node.js unterstützt. Der Internet Explorer 11 unterstützt es nicht.