Signatur
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
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}`);
}
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
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);
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'])));
// 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 istArray.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 mitArray.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. direktesfor...ofgünstiger. - Kompatibilität: Wird von allen modernen Browsern und Node.js unterstützt, nicht aber vom Internet Explorer.