Signatur
Beschreibung
Die Methode values() gibt ein neues Set-Iterator-Objekt zurück. Es liefert die Werte aller Elemente des Sets in der Reihenfolge, in der sie eingefügt wurden. Der Iterator hält sich an das Iterator-Protokoll: Jeder Aufruf von next() gibt ein Objekt der Form { value, done } zurück.
values() ist die Standard-Iterationsmethode von Set. Set.prototype[Symbol.iterator] verweist auf genau dieselbe Funktion. Deshalb liefern for...of, die Spread-Syntax ([...set]) und Array.from(set) dasselbe Ergebnis wie ein expliziter Aufruf von values(). Auch Set.prototype.keys() ist nur ein anderer Name für values(). Ein Set hat keine eigenen Schlüssel, deshalb gibt es diese Methode vor allem für die Einheitlichkeit mit Map.
Ein expliziter Aufruf lohnt sich, wenn du ein Iterator-Objekt selbst brauchst: zum Beispiel, um Werte schrittweise mit next() abzurufen, um nur das erste Element zu lesen oder um die Iterator-Hilfsmethoden aus ES2025 zu nutzen (map(), filter(), take() usw.).
Der Iterator ist live: Werte, die während der Iteration hinzugefügt werden und noch nicht erreicht wurden, werden mit durchlaufen. Werte, die vorher gelöscht werden, werden übersprungen.
Rückgabewert
Beispiele
Werte schrittweise mit next() abrufen
const farben = new Set(['rot', 'grün', 'blau']);
const it = farben.values();
console.log(it.next()); // erster Wert
console.log(it.next());
console.log(it.next());
console.log(it.next()); // Iterator erschöpft
Erstes Element eines Sets lesen
const warteschlange = new Set(['job-17', 'job-18', 'job-19']);
// Ohne Umweg über ein Array das älteste Element holen
const erster = warteschlange.values().next().value;
warteschlange.delete(erster);
console.log(erster);
console.log([...warteschlange]);
Eindeutige Tags aufbereiten (for...of und Spread)
const artikel = [
{ titel: 'A', tags: ['js', 'web'] },
{ titel: 'B', tags: ['web', 'css'] },
{ titel: 'C', tags: ['js'] }
];
const tags = new Set(artikel.flatMap(a => a.tags));
for (const tag of tags.values()) {
console.log(`#${tag}`);
}
// Identisch zu [...tags]
const sortiert = [...tags.values()].sort();
console.log(sortiert);
console.log(tags.values === tags[Symbol.iterator]);
Iterator-Hilfsmethoden (ES2025)
const zahlen = new Set([1, 2, 3, 4, 5, 6]);
const geradeQuadrate = zahlen.values()
.filter(n => n % 2 === 0)
.map(n => n * n)
.toArray();
console.log(geradeQuadrate);
// Wichtig · Fallstricke
- Nur einmal verwendbar: Ein Iterator lässt sich nur einmal durchlaufen. Ist er erschöpft (
done: true), liefert er keine Werte mehr. Für einen neuen Durchlauf rufst duvalues()erneut auf. - Live-Verhalten: Änderungen am Set während der Iteration wirken sich auf den Iterator aus. Wenn du in einer Schleife Elemente hinzufügst, die du sofort wieder durchläufst, entsteht unter Umständen eine Endlosschleife. Iteriere in dem Fall besser über eine Kopie (
[...set]). - Kein Array: Der Rückgabewert hat keine Array-Methoden wie
lengthoderforEach. Wandle ihn bei Bedarf mitArray.from()oder Spread-Syntax um. keys()undvalues()sind beiSetidentisch.entries()liefert Paare der Form[wert, wert].- Kompatibilität:
values()wird seit ES2015 in allen modernen Browsern und in Node.js unterstützt. Die Iterator-Hilfsmethoden (map,filter,toArray…) gibt es erst seit ES2025. Ältere Umgebungen brauchen dafür ein Polyfill.