Start · Sprachen · JavaScript · Referenz · Set.prototype.keys()

Set.prototype.keys()

Methode

Gibt einen neuen Set-Iterator zurück, der alle Werte des Sets in Einfügereihenfolge liefert – ein Alias für <code>Set.prototype.values()</code>.

seit JavaScript ES2015 Kategorie: method-property

Signatur

Set.prototype.keys()

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

Typ
SetIterator<T>
Beschreibung
Ein neues, iterierbares Iterator-Objekt, das die Werte des Sets in Einfügereihenfolge liefert. Jeder Aufruf von 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);
js css html true

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());
{ value: 101, done: false } { value: 202, done: false } { value: undefined, done: true }

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));
[ 'admin', 'editor' ] [ 'anna', 'max', 'zoe' ]

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);
[ 'a@x.de', 'b@x.de' ]

// Wichtig · Fallstricke

  • Kein echter Schlüssel: Ein Set hat keine Schlüssel. keys() liefert exakt dieselben Werte wie values(). Wer Schlüssel-Wert-Paare braucht, sollte Map verwenden. 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 Durchlauf keys() 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() oder filter(). Vorher mit [...] oder Array.from() umwandeln – oder in neueren Umgebungen (ES2025) die Iterator-Helfer wie set.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.