JavaScript/Objekte/Map/forEach

Aus SELFHTML-Wiki
< JavaScript‎ | Objekte‎ | Map
Wechseln zu: Navigation, Suche

Die Methode forEach kann dazu verwendet werden um über alle in einer Map hinterlegten Einträge zu iterieren.


Syntax

Map.prototype.forEach(callback[, thisArg])


Attribute
Writable true
Enumerable false
Configurable true


Prototyp


Eigenschaften


Beschreibung

Die Methode forEach erwartet als erstes Argument eine Rückruffunktion, welche dann für jeden in der Map hinterlegten Eintrag einmal aufgerufen wird, in der Reihenfolge, in der die Einträge der Map hinzugefügt wurden. Über den optionalen zweiten Parameter von forEach kann der Wert spezifiziert werden, in dessen Kontext die Rückruffunktion aufgerufen wird. Der Rückgabewert der Methode ist grundsätzlich undefined.

Beispiel
const map = new Map([
  ['first',  1],
  ['second', 2],
  ['third',  3]
]);

map.forEach((value, key, map) => console.log(value)); // 1, 2, 3

Der Rückruffunktion werden bei jedem Aufruf drei Argumente übergeben, nämlich als erstes der Wert des Eintrags, als zweites der Schlüssel und als drittes Argument eine Referenz auf die Map selbst. Letzteres erscheint vielleicht auf den ersten Blick unnötig, aber wenn innerhalb der Rückruffunktion mit der Map gearbeitet werden soll, dann ist es nicht immer möglich, diese über die äußere lexikalische Umgebung der Funktion zu referenzieren.

Beachten Sie:
  • Die Rückruffunktion findet nicht automatisch die Map als Wert als Kontext (also als Wert von this) vor. Für den Kontext gelten die üblichen Regeln von Funktionsaufrufen. Um einen bestimmten Kontext festzulegen, müssen Sie ihn mittels des zweiten Parameters von forEach setzen.
  • Pfeilfunktionen haben keinen eigenen Kontext. Wenn Sie den zweiten Parameter von forEach verwenden, um einen Kontext zu setzen, können Sie diesen in der Rückruffunktion nur nutzen, wenn sie eine gewöhnliche Funktion ist.
Übergabe eines Kontexts für den forEach-Callback
const set = new Set([
  1, 2, 3, 4, 5
]);

const map = new Map([
  ['first', 0],
  ['last',  1]
]);

function callback (value) {
  console.log(this.has(value));   // this enthält das Set!
}

map.forEach(callback, set);       // set als Kontext für den Callback übergeben
Das Ergebnis dafür wäre:
false
true

Entfernen und Hinzufügen von Einträgen

Werden der Map über die iteriert wird bei der Ausführung der Methode forEach Einträge hinzugefügt, dann wird die Rückruffunktion auch für diese Einträge aufgerufen, in der Reihenfolge in welcher die Einträge der Map hinzugefügt wurden.


Beispiel
const types = new Map([
  [true, 'boolean'],
  [null, 'null']
]);

types.forEach(function (value, key, map) {
  if (key === null) {
    map.set(false, 'boolean');
  }
  console.log(value); // boolean, null, boolean
});


Wie in diesem Beispiel zu sehen ist, wird auch ein bei der Ausführung hinzugefügter Eintrag von forEach verwendet, um damit die Rückruffunktion aufzurufen. Ebenso gilt, dass wenn ein Eintrag aus der Map entfernt wird, die Rückruffunktion für diesen Wert nicht mehr aufgerufen wird. Werden also beispielsweise mittels clear alle Einträge entfernt, dann ist die Iteration beendet. Veränderungen der Map werden also grundsätzlich berücksichtigt, sofern sie Einträge betreffen, für welche die Rückruffunktion noch nicht aufgerufen wurde. Einträge, die vor dem Aufruf der Methode forEach aus der Map entfernt wurden, werden hingegen prinzipiell nicht berücksichtigt.

Spezifikation

Map.prototype.forEach ECMAScript 2015 ECMAScript 2016 ECMAScript 2017 Draft

Weblinks