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

Set.prototype.entries()

Methode

Gibt einen neuen Set-Iterator zurück, der für jedes Element des Sets ein Array <code>[value, value]</code> in Einfügereihenfolge liefert.

seit JavaScript ES2015 (Baseline: alle Browser, Node.js 0.12+) Kategorie: method-property

Signatur

Set.prototype.entries()

Beschreibung

entries() gibt ein neues Set-Iterator-Objekt zurück. Es liefert für jedes Element des Sets ein zweielementiges Array [value, value], und zwar in der Reihenfolge, in der die Elemente eingefügt wurden. Weil ein Set keine Schlüssel kennt, stehen an beiden Positionen dieselben Werte.

Die Methode gibt es vor allem, damit Set dieselbe Schnittstelle hat wie Map. Code, der mit [key, value]-Paaren arbeitet, kann also ohne Anpassung auch ein Set verarbeiten. Beispiele sind generische Hilfsfunktionen, new Map(set.entries()) oder Object.fromEntries().

Wenn du nur die Werte brauchst, nimm besser for...of direkt auf dem Set oder Set.prototype.values(). Das ist übersichtlicher, und es wird kein Array pro Element erzeugt. Der Iterator ist live: Elemente, die während der Iteration hinzugefügt werden und noch nicht besucht wurden, kommen mit. Gelöschte Elemente werden übersprungen.

Rückgabewert

Typ
SetIterator<[T, T]>
Beschreibung
Ein neues, iterierbares Iterator-Objekt. Jeder Aufruf von next() liefert { value: [element, element], done: false }. Am Ende liefert er { value: undefined, done: true }.

Beispiele

Einträge mit for...of und Destrukturierung durchlaufen

const tags = new Set(['js', 'css', 'html']);

for (const [key, value] of tags.entries()) {
  console.log(`${key} = ${value}`);
}
js = js css = css html = html

Iterator manuell mit next() abfragen

const ids = new Set([42, 7]);
const it = ids.entries();

console.log(it.next()); // erstes Paar
console.log(it.next());
console.log(it.next()); // fertig
{ value: [ 42, 42 ], done: false } { value: [ 7, 7 ], done: false } { value: undefined, done: true }

Set in Map oder Objekt umwandeln

const rollen = new Set(['admin', 'editor']);

// Jede Rolle als Schlüssel und als Wert
const rollenMap = new Map(rollen.entries());
console.log(rollenMap.get('admin'));

const flags = Object.fromEntries(rollen.entries());
console.log(flags);
admin { admin: 'admin', editor: 'editor' }

Generische Funktion für Map und Set

const dump = (collection) =>
  [...collection.entries()].map(([k, v]) => `${k}:${v}`).join(', ');

console.log(dump(new Map([['a', 1], ['b', 2]])));
console.log(dump(new Set(['x', 'y'])));
a:1, b:2 x:x, y:y

// Wichtig · Fallstricke

  • Schlüssel gleich Wert: Bei einem Set sind beide Einträge im Paar identisch. Einen Index gibt es nicht. Wenn du einen Zähler brauchst, nimm [...set].entries() (das ist Array.prototype.entries()) oder führe selbst einen Zähler mit.
  • Einmal durchlaufbar: Ein Iterator ist nach dem Durchlauf erschöpft. Für einen neuen Durchlauf musst du entries() erneut aufrufen.
  • Live-Verhalten: Ändert sich das Set während der Iteration, wirkt sich das auf den laufenden Iterator aus. Wer während der Iteration Elemente hinzufügt, kann eine Endlosschleife erzeugen.
  • Kein Array: Der Rückgabewert hat keine Array-Methoden wie map. Wandle ihn mit Array.from() oder Spread-Syntax um. In neueren Umgebungen (ES2025) gibt es dafür auch Iterator-Helfer wie .map() und .filter().
  • Performance: Pro Element wird ein neues Array erzeugt. Wenn du nur die Werte brauchst, ist values() bzw. direktes for...of günstiger.
  • Kompatibilität: Wird von allen modernen Browsern und Node.js unterstützt, nicht aber vom Internet Explorer.