Signatur
Beschreibung
values() liefert einen Map-Iterator, der nacheinander nur die Werte der Map ausgibt, ohne die Schlüssel. Die Reihenfolge entspricht der Einfügereihenfolge der Einträge. Ändert man den Wert eines bestehenden Schlüssels mit set(), bleibt dessen Position erhalten.
Der Iterator ist selbst iterierbar. Man kann ihn daher direkt in for...of, im Spread-Operator ([...map.values()]), in Array.from() oder in der Destrukturierung verwenden. Das ist praktisch, wenn man etwa Summen, Durchschnitte oder Listen aus den gespeicherten Werten berechnen möchte.
Wichtig: Der Iterator ist lebendig (live) und einmalig verwendbar. Einträge, die während der Iteration hinzugefügt werden, werden noch mitgeliefert, gelöschte dagegen nicht mehr. Ist der Iterator einmal durchlaufen, liefert er nur noch { value: undefined, done: true }. Für einen erneuten Durchlauf muss man values() noch einmal aufrufen.
Rückgabewert
next() liefert { value, done } mit dem jeweils nächsten Wert der Map.Beispiele
Werte mit for...of durchlaufen
const lagerbestand = new Map([
['Äpfel', 120],
['Birnen', 45],
['Kirschen', 300]
]);
for (const menge of lagerbestand.values()) {
console.log(menge);
}
Summe und Durchschnitt aus Map-Werten berechnen
const punkte = new Map([
['anna', 87],
['ben', 92],
['clara', 78]
]);
const werte = [...punkte.values()];
const summe = werte.reduce((acc, p) => acc + p, 0);
const schnitt = summe / punkte.size;
console.log(summe, schnitt.toFixed(1));
Iterator manuell mit next() abfragen
const status = new Map([
[200, 'OK'],
[404, 'Not Found']
]);
const it = status.values();
console.log(it.next());
console.log(it.next());
console.log(it.next());
Werte filtern: aktive Benutzerobjekte ermitteln
const benutzer = new Map([
[1, { name: 'Anna', aktiv: true }],
[2, { name: 'Ben', aktiv: false }],
[3, { name: 'Clara', aktiv: true }]
]);
const aktiveNamen = Array.from(benutzer.values())
.filter((u) => u.aktiv)
.map((u) => u.name);
console.log(aktiveNamen);
// Wichtig · Fallstricke
- Kein Array: Der Rückgabewert ist ein Iterator und kein Array. Methoden wie
map(),filter()oderlengthgibt es darauf nicht. Man wandelt ihn vorher mit[...map.values()]oderArray.from()um. In neueren Umgebungen (ES2025, Iterator Helpers) stehen auch.map(),.filter()und.toArray()direkt auf dem Iterator zur Verfügung. Die Unterstützung sollte man vorher prüfen. - Einmalig verwendbar: Ein bereits durchlaufener Iterator ist erschöpft. Wer ihn in einer Variable speichert und zweimal durchläuft, erhält beim zweiten Durchlauf nichts mehr.
- Live-Verhalten: Änderungen an der Map während der Iteration wirken sich auf den laufenden Iterator aus. Wer die Map in der Schleife verändert, iteriert besser über eine Kopie (
[...map.values()]). - Werte sind nicht eindeutig: Anders als die Schlüssel können Werte mehrfach vorkommen. Für eindeutige Werte hilft
new Set(map.values()). - Wird die Methode auf einem Objekt aufgerufen, das keine
Mapist (z. B. perMap.prototype.values.call({})), wirft sie einenTypeError. - Kompatibilität: wird seit ES2015 von allen modernen Browsern und von Node.js unterstützt.