Start · Sprachen · JavaScript · Referenz · Map.prototype.values()

Map.prototype.values()

Methode

Gibt ein neues Map-Iterator-Objekt zurück, das die Werte aller Einträge der <code>Map</code> in Einfügereihenfolge liefert.

seit JavaScript ES2015 Kategorie: method-property

Signatur

Map.prototype.values()

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

Typ
MapIterator<any>
Beschreibung
Ein neues, iterierbares Map-Iterator-Objekt. Jeder Aufruf von 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);
}
120 45 300

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));
257 85.7

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());
{ value: 'OK', done: false } { value: 'Not Found', done: false } { value: undefined, done: true }

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);
[ 'Anna', 'Clara' ]

// Wichtig · Fallstricke

  • Kein Array: Der Rückgabewert ist ein Iterator und kein Array. Methoden wie map(), filter() oder length gibt es darauf nicht. Man wandelt ihn vorher mit [...map.values()] oder Array.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 Map ist (z. B. per Map.prototype.values.call({})), wirft sie einen TypeError.
  • Kompatibilität: wird seit ES2015 von allen modernen Browsern und von Node.js unterstützt.