Inhaltsverzeichnis

Die Anleitung zu ECMAScript Map Collection

View more Tutorials:

1- Collections - Map

ECMAScript 6 stellt 2 neue Datenstruktur Map & Set vor. Sie sind eine Teil in Collections Framework vom ECMAScript.
  • Maps - Die Datenstruktur erlaubt Sie, die Paar "Schlüssel/Wert" (Key/Value) zu speichern. Und Sie können durch den Schlüssel in die Wert zugreifen oder die einem Schlüssel entsprechende neue Wert aktualisieren.
  • Sets - Die Datenstruktur speichert eine List der Elemente, die überlappen und die Index für die Elemente markieren nicht dürfen.
In diesem Artikel werde ich Sie Map vorstellen​​​​​​​ .
Mehr sehen
  • TODO Link!

Map:

Ein Objekt Map speichert die Paar "Schlüssel/Wert" (Key/Value). Davon können Schlüssel und Wert die Type primitiv oder Objekt.
  • Im Objekt Map dürfen die Schlüssel (key) überlappen nicht.
  • Map ist ein ordentliches Datenstyp, d.h welche Paar "Schlüssel/Wert" zuerst eingefügt wird, wird es zuerst stehen und welche Paar später eingefügt wird, wird es hinter stehen

Erstellen Sie ein Objekt Map durch constructor der Klasse Map:

new Map( [iteratorObject] )
 
Die Parameter :
  • iteratorObject --  ist irgendein iterierbares Objekt (iterable).
Properties:
Property Die Bezeichnung
size Property gibt die Anzahl der Paar "Schlüssel/Wert" des Objekt Map zurück. 
map-size-example.js
var myContacts = new Map();

myContacts.set("0100-1111", "Tom");
myContacts.set("0100-5555", "Jerry");
myContacts.set("0100-2222", "Donald");

console.log(myContacts.size); // 3

for..of

Sie können die Schleife  for...of um auf die Paar  key/value vom  Map ​​​​​​​zu iterieren.
map-for-of-loop-example.js
// Create a Map object.
var myContacts = new Map();

myContacts.set("0100-1111", "Tom");
myContacts.set("0100-5555", "Jerry");
myContacts.set("0100-2222", "Donald");


for( let arr of myContacts)  {
  console.log(arr);
  console.log(" - Phone: " + arr[0]);
  console.log(" - Name: " + arr[1]);
}

2- Map Methods

set(key, value)

Das Method set(key,newValue) wird ein Paar key/newValue in dem Objekt Map einfügen wenn keine solche Schlüsselpaar existieren, umgekehrt aktualisiert es die neue Wert für das Paar key/value , die im Map gefunden wird
map-set-example.js
var data = [
   ["0100-1111", "Tom"],
   ["0100-5555", "Jerry"],
   ["0100-2222", "Donald"]
];
var myContacts = new Map(data);

console.log(myContacts);

// Add new Key/Value pair to Map
myContacts.set("0100-9999", "Mickey");

console.log(myContacts);

// Update
myContacts.set("0100-5555", "Bugs Bunny");

console.log(myContacts);

has(key)

Dieses Method prüft, ob ein Schlüssel im Map existiert oder nicht. True zurückgeben wenn existiert, umgekehrt false.

.
map-has-example.js
var data = [
   ["0100-1111", "Tom"],
   ["0100-5555", "Jerry"],
   ["0100-2222", "Donald"]
];
var myContacts = new Map(data);


var has = myContacts.has("0100-5555");

console.log("Has key 0100-5555? " + has); // true

clear()

Alle Paar "Schlüssel/Wert" aus dem Objekt Map entfernen.

map-clear-example.js
var data = [
   ["0100-1111", "Tom"],
   ["0100-5555", "Jerry"],
   ["0100-2222", "Donald"]
];
var myContacts = new Map(data);


console.log("Size: " + myContacts.size); // 3

myContacts.clear();

console.log("Size after clearing: " + myContacts.size); // 0

delete(key)

Ein Paar "Schlüssel/Wert" aus dem Objekt Map entfernen, true zurückgeben wenn ein Paar aus Map entfernt wird, false zurückgeben wenn der Schlüssel (Key) im Map nicht existiert.
map-delete-example.js
var data = [
   ["0100-1111", "Tom"],
   ["0100-5555", "Jerry"],
   ["0100-2222", "Donald"]
];
var myContacts = new Map(data);

console.log("Size: " + myContacts.size); // 3

var deleted = myContacts.delete("0100-5555");

console.log("Deleted? " + deleted); // true

console.log("Size after delete: " + myContacts.size); // 2
 

entries()

Ein Objekt Iterator zurückgeben, und jede entry vom ihm enthaltet ein 2 Element Array [key, value], die Reihenfolge von entry haltet so gleich wie die Reihenfolge der Paar Key/Value im Objekt Map. (die Illustration unten sehen).
  • TODO Link!
map-entries-example.js
var myContacts = new Map();

myContacts.set("0100-1111", "Tom");
myContacts.set("0100-5555", "Jerry");
myContacts.set("0100-2222", "Donald");

var entries = myContacts.entries();

var entry;

while( !(entry = entries.next()).done )  {
  var array = entry.value;

  console.log(array); // [ '0100-1111', 'Tom' ]
}

keys()

Dieses Method gibt ein neues Objekt Iterator zurück, damit Sie in die Schlüssel des Objekt Map zugreifen können
map-keys-example.js
var data = [
   ["0100-1111", "Tom"],
   ["0100-5555", "Jerry"],
   ["0100-2222", "Donald"]
];
var myContacts = new Map(data);

var iteratorPhones= myContacts.keys();

var entry;

while( !(entry = iteratorPhones.next()).done )  {
  var phone = entry.value;

  console.log(phone); // 0100-1111
}

values()

Dieses Method gibt ein neues Objekt Iterator zurück, damit Sie in die Wert des Objekt Map zugreifen können.
map-values-example.js
var data = [
   ["0100-1111", "Tom"],
   ["0100-5555", "Jerry"],
   ["0100-2222", "Donald"]
];
var myContacts = new Map(data);

var iteratorNames = myContacts.values();

var entry;

while( !(entry = iteratorNames.next()).done )  {
  var name = entry.value;

  console.log(name); // Tom
}

forEach(callbackFn [, thisArg])

Dieses Method ruft die Funktion callbackFn auf, darin jede Aufruf entspricht jedem Paar "Schlussel/Wert" des Objekt Map
myMap.forEach(callback[, thisArg])
 

Die Parameter:

  • callbackFn - Die Funktion wird aufgeruft und jedes Mal entspricht einem Paar "Schlüssel/Wert" des Objekt Map.
  • thisArg - Der Parameter wird bei der Implementation der Funktion callbackFn als this benutzt
map-forEach-example.js
var showContact = function(key, value, thisMap)  {
    console.log("Phone: " + key +". Name: " + value);
}

var data = [
   ["0100-1111", "Tom"],
   ["0100-5555", "Jerry"],
   ["0100-2222", "Donald"]
];
var myContacts = new Map(data);

// or call: myContacts.forEach(showContact)
myContacts.forEach(showContact, myContacts);

3- WeakMap

Im Grunde ist  WeakMap ziemlich so ähnlich wie  Map, aber es hat die folgenden Unterschiede:
  1. Seine Schlüssel müssen die Objekte sein.
  2. Die Schlüssel vom WeakMap können in dem Prozess der Abfallssammlung (garbage collection) entfernt werden. Das ist ein unabhängiger Prozess für die Entfernung der Objekte, die im Programm nicht mehr benutzt werden.
  3. WeakMap unterstützt property: size nicht. Deshalb können Sie nicht wissen, wie viele Elemente es hat.
  4. Viele Methode dürfen in die Klasse Map liegen aber nicht in die Klasse WeakMap, z.B values(), keys(), clear(),..
Achtung: Sie können die Schleife  for..of für  WeakMap nicht benutzen, und es gibt keine Maßnahme zur Iteration auf die Paar  key/value vom  WeakMap.
Ein Objekt  WeakMap erstellen.
var map2 = new WeakMap( [iteratorObject] )
Die Parameter:
  • iteratorObject - Ist irgendein iterierbares Objekt  (iterable).

Methods:

Die Anzahl der Methode vom   WeakMap ist weniger als die Anzahl der Methode vom  Map:
  1. WeakMap.delete(key)
  2. WeakMap.get(key)
  3. WeakMap.has(key)
  4. WeakMap.set(key, value)
Die Schlüssel (key) im  WeakMap ist kein Objekt. Es kann kein primitives Typ sein ( Primitive).
let w = new WeakMap();
w.set('a', 'b'); // Uncaught TypeError: Invalid value used as weak map key

let m = new Map();
m.set('a', 'b'); // Works
weakmap-example.js
var key1 = {}; // An Object
var key2 = {foo: "bar"};
var key3 = {bar: "foo"};

var data = [
   [key1, "Tom"],
   [key2, "Jerry"],
   [key3, "Donald"]
];
var myWeakMap = new WeakMap(data);

console.log(myWeakMap.get(key1));

View more Tutorials: