JavaScript/Objekte/Map

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Mit dem eingebauten Konstruktor Map können Maps erstellt werden. Dabei handelt es sich um geordnete Listen, deren Einträge aus einem Schlüssel und einem Wert bestehen, wobei sowohl die Werte als auch die Schlüssel von einem beliebigen Datentyp sein können. Über sein prototypisches Objekt stellt der Konstruktor eine Auswahl an Methoden zur Verfügung, um auf den Einträgen von Maps zu operieren, etwa um Einträge hinzuzufügen oder zu entfernen.


Syntax

new Map([iterable])


Attribute
Writable true
Enumerable false
Configurable true



Erzeugung von Maps[Bearbeiten]

Eine Map, in anderen Programmiersprachen auch als Dictionary oder assoziatives Array bekannt, wird durch den Aufruf des Konstruktors Map erzeugt. Dabei werden die je aus einem Schlüssel und einem Wert bestehenden Einträge in einem iterierbaren Objekt übergeben, bei dem es sich wie in dem folgenden Beispiel um ein gewöhnliches Array handeln kann. Jeder Eintrag wird dabei selbst wieder in einem Array mit zwei Elementen übergeben. Das erste Element ist der Schlüssel, das zweite der Wert.


Beispiel
const squares = new Map([
    [1, 1],
    [2, 4],
    [3, 9],
    [4, 16],
    [5, 25],
    [6, 36],
    [7, 49]
]);

squares.get(3); // 9


Hierbei ist zu beachten, dass anders als bei einigen anderen Konstruktorfunktionen, der Konstruktor Map zwingend mit dem Operator new aufgerufen werden muss, da sonst ein Typfehler erzeugt wird, der unbehandelt das Programm beendet. Ist das beim Aufruf von Map übergebene Argument kein iterierbares Objekt, dann führt dies ebenfalls zu einem Typfehler. Der Konstruktor Map kann allerdings auch ohne Argumente aufgerufen werden, um eine leere Map zu erstellen, wie das folgende Beispiel zeigt.


Beispiel
const capitals = new Map;

capitals.set('Canada', 'Ottawa').set('Germany', 'Berlin').set('Italy', 'Rome');


Wird beim Aufruf von Map kein Objekt mit Einträgen übergeben, dann können die Runden Klammern wie allgemein beim Konstruktorenaufruf mit new auch weggelassen werden. Nach der Erzeugung einer Map können Einträge nur noch einzeln mit der Methode set hinzugefügt werden, deren Aufrufe jedoch wie in dem Beispiel oben verkettet werden können, da immer das jeweilige Instanzobjekt zurückgegeben wird.


Beispiel
const f = x => x ** 2 + x,

      g = x => 3 * x ** 2 + 5;


const derivatives = new Map([
    [f, x => 2 * x + 1],
    [g, x => 6 * x]
]);


Anders als bei gewöhnlichen Objekten, deren Eigenschaftsnamen prinzipiell nur vom Datentyp String oder Symbol sein können, sind bei Maps sowohl für die Schlüssel als auch für die Werte der Einträge alle Datentypen zulässig. Es ist also ohne weiteres möglich, wie in dem Beispiel oben Referenzen auf Funktionsobjekte als Schlüssel zu verwenden.


ToDo (weitere ToDos)

Artikel ist unvollständig.

In der Zwischenzeit sei auf den sehr guten und anschaulichen Forumsbeitrag von Orlok verwiesen. --Matthias Scharwies (Diskussion) 6:12, 23. Jul. 2016 (CEST)


Spezifikation[Bearbeiten]


Weblinks[Bearbeiten]