JavaScript/Objekte/Map/entries

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

Wird die Methode entries auf einer Map aufgerufen, dann wird ein Iteratorobjekt erzeugt und zurückgegeben, mit dem über die Einträge der Map iteriert werden kann. Dabei werden sowohl die Schlüssel als auch die Werte ausgegeben, in der Reihenfolge in der die Einträge der Map hinzugefügt wurden.


Syntax

Map.prototype.entries( )


Attribute
Writable true
Enumerable false
Configurable true


Prototyp


Eigenschaften


Beschreibung[Bearbeiten]

Die Methode entries ist ohne Argumente aufzurufen und gibt einen Iterator zurück, mit dem über die Einträge der Map iteriert werden kann. Die Einträge werden dabei in Form eines Arrays mit zwei Elementen ausgegeben. Das erste Element ist der Schlüssel des Eintrags und das zweite der dazugehörige Wert.


Beispiel
const map = new Map([
  ['key', 'value']
]);

const iterator = map.entries( );

console.log(iterator.next( ).value); // [key, value]


In diesem Beispiel wird zunächst eine Map mit einem Eintrag erstellt. Auf dieser Map wird dann die Methode entries aufgerufen und der zurückgegebene Iterator einer gleichnamigen Konstante als Wert zugewiesen. Wie die Ausgabe in der Konsole zeigt, wird beim Aufruf der Iteratormethode next ein Ergebnisobjekt zurückgegeben, dessen Eigenschaft value den kompletten Eintrag in einem Array enthält.


Beispiel
const map = new Map( ).set('key', 'value');

for (let entry of map.entries( )) {
  console.log(entry); // [key, value]
}


Wird der von der Methode entries zurückgegebene Iterator einer Schleife mit for und of übergeben, dann wird die Schleifenvarieble entsprechend mit den Einträgen der Map initialisiert, sodass im Körper der Schleife sowohl auf die Schlüssel als auch auf die Werte zugegriffen werden kann.


Beispiel
const map = new Map([
  ['key', 'value']
]);

for (let [key, value] of map.entries( )) {
  console.log(key); // key
  console.log(value); // value
}


Soll mit beiden Werten gearbeitet werden, also sowohl mit dem Schlüssel als auch mit dem Wert des jeweiligen Eintrags, dann bietet es sich an, wie in dem Beispiel oben das von dem Iterator der Methode entries ausgegebene Array, mit dem die Schleifenvariable initialisiert wird, direkt im Kopf der Schleife zu destrukturieren, statt die entsprechenden Zuweisungen erst im Schleifenkörper vorzunehmen.

Standardschnittstelle[Bearbeiten]

Bei der Methode entries handelt es sich um die Standardschnittstelle für die Iteration von Maps. Das heißt, wenn eingebaute Konstrukte wie beispielsweise eine Schleife mit for und of verwendet werden, um über die Einträge einer Map zu iterieren, dann ist ein expliziter Aufruf der Methode entries überflüssig, da diese automatisch aufgerufen wird, wenn kein anderer Iterator angegeben wird.


Beispiel
const map = new Map([
  ['key', 'value'],
]);

for (let entry of map) {
  console.log(entry); // [key, value]
}


Hier wird unter Verwendung einer Schleife mit for und of über eine zuvor erzeugte Map iteriert, wobei im Schleifenkopf nur eine Referenz auf die Map gesetzt wird. Da es sich bei der Map selbst nicht um einen Iterator handelt, wird intern nachgesehen, ob auf der Map oder auf einem ihrer Prototypen eine Standardschnittstelle für die Iteration definiert ist. Dies ist hier der Fall, nämlich die Methode entries, sodass diese Methode in der Folge automatisch aufgerufen und das zurückgegebene Iteratorobjekt für die Iteration verwendet wird.

Kopieren von Maps[Bearbeiten]

Da von der Methode entries die Einträge der Map in Arrays ausgegeben werden, also in einer Form, wie sie auch bei der Initialisierung einer neu erstellten Map erwartet werden, und da es sich bei der Methode entries wie gesehen um die Standardschnittstelle für die Iteration von Maps handelt, kann eine Map beim Aufruf des Konstruktors einfach als Argument übergeben werden, um eine Kopie der enthaltenen Einträge zu erstellen.


Beispiel
const source = new Map([
  ['key', 'value']
]);

const copy = new Map(source);

console.log(copy.get('key')); // value


In diesem Beispiel wird zu nächst eine Map mit einem Eintrag erstellt. Diese Map wird dann bei der Erzeugung einer zweiten Map dem Konstruktor als Argument übergeben, wobei intern auf der Map die Methode entries aufgerufen wird. Dies hat zur Folge, dass der Eintrag in die neue Map kopiert wird, was die abschließende Überprüfung bestätigt.

Eigene Eigenschaften[Bearbeiten]

Die Methode entries besitzt zwei eigene Eigenschaften namens length und name. Die Eigenschaft length hat den Wert Null, da für die Methode keine formalen Parameter definiert sind. Der Wert von name ist der Name der Methode, also der String entries.


Beispiel
const entries = Map.prototype.entries;

const keys = Reflect.ownKeys(entries);

keys.forEach(key =>
  console.log(entries[key]) // 0, entries
);


Beide Eigenschaften sind standardmäßig nicht aufzählbar und schreibgeschützt. Da der Wert des Attributes configurable jedoch in beiden Fällen true ist, ist es möglich die Eigenschaften durch explizite Definition zu manipulieren. Von der Veränderung eingebauter Objekte ist allerdings grundsätzlich abzuraten.

Spezifikation[Bearbeiten]

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

Weblinks[Bearbeiten]