From 4b1a9203c547c019fc5398082ae19a3f3d4c3efe Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:41:15 -0500 Subject: initial commit --- .../javascript/guide/keyed_collections/index.html | 157 +++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 files/de/web/javascript/guide/keyed_collections/index.html (limited to 'files/de/web/javascript/guide/keyed_collections/index.html') diff --git a/files/de/web/javascript/guide/keyed_collections/index.html b/files/de/web/javascript/guide/keyed_collections/index.html new file mode 100644 index 0000000000..a9b501da9e --- /dev/null +++ b/files/de/web/javascript/guide/keyed_collections/index.html @@ -0,0 +1,157 @@ +--- +title: Collections mit Schlüssel +slug: Web/JavaScript/Guide/Keyed_collections +tags: + - Collections + - Guide + - JavaScript + - Map + - 'l10n:priority' + - set +translation_of: Web/JavaScript/Guide/Keyed_collections +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Indexed_Collections", "Web/JavaScript/Guide/Working_with_Objects")}}
+ +

Dieses Kapitel gibt eine Einleitung in Sammlungen von Daten, welche mit einem Schlüssel verknüpft werden. Map und Set Objekte enthalten Elemente, die in der Reihenfolge ihres Einfügens iterierbar sind.

+ +

Maps

+ +

Map Objekt

+ +

ECMAScript 2015 führt eine neue Datenstruktur ein, um Werte auf Werte zu abbildet. Ein {{jsxref("Map")}} Objekt ist eine einfache Schlüssel/Werte-Abbildung und man kann über die Element in der Einfügereihenfolge iterieren.

+ +

Das folgende Beispiel zeigt einige Basisoperationen mit einer Map.  Für mehr Beispiele und die komplette API siehe zudem die Referenzseite {{jsxref("Map")}}. Man kann eine {{jsxref("Statements/for...of","for...of")}} Schleife benutzen, um ein Array von [key, value] für jede Iteration zurückzugeben.

+ +
var sayings = new Map();
+sayings.set('dog', 'woof');
+sayings.set('cat', 'meow');
+sayings.set('elephant', 'toot');
+sayings.size; // 3
+sayings.get('fox'); // undefined
+sayings.has('bird'); // false
+sayings.delete('dog');
+sayings.has('dog'); // false
+
+for (var [key, value] of sayings) {
+  console.log(key + ' goes ' + value);
+}
+// "cat goes meow"
+// "elephant goes toot"
+
+sayings.clear();
+sayings.size; // 0
+
+ +

Object und Map im Vergleich

+ +

Traditionell werden {{jsxref("Object", "Objekte", "", 1)}} eingesetzt, um Strings auf Werte abzubilden. Objekte erlauben es Werte zu Schlüsseln zu setzen, diese Werte abzufragen, Schlüssel zu löschen und erkennen, ob etwas zu einem Schlüssel gespeichert wurde. Map Objekte haben ein paar Vorteile, was sie zu besseren Abbildungen macht.

+ + + +

Diese drei Tipps können bei der Entscheidung für eine Map oder ein Object helfen:

+ + + +

WeakMap Objekte

+ +

Das {{jsxref("WeakMap")}} Objekt ist eine Collection von Schlüssel/Werte-Paaren, wobei der Schlüssel nur ein Objekt sein kann und die Werte willkürliche Werte sein können. Die Objektreferenzen in den Schlüsseln werden weakly gehalten, was bedeutet, dass diese Referenz ein Ziel des Speicherbereinigung (Garbage Collectors (GC)) wird, wenn keine andere Referenz mehr auf dieses Objekt referenziert. Die WeakMap API ist die gleiche wie die Map API.

+ +

Einen Unterschied zu Map Objekten ist, dass WeakMap Schlüssel nicht aufzählbar sind (z. B. gibt es keine Methode, die eine Liste von Schlüsseln zurückgibt). Wenn dies der Fall wäre, würde die Liste vom Zustand der Speicherbereinigung abhängen, was zu Nicht-Determinismus führen würde.

+ +

Für mehr Informationen, Beispiele und "Warum WeakMap" auf der {{jsxref("WeakMap")}} Referenzseite.

+ +

Ein Einsatzgebiet für WeakMaps ist der Einsatz für Private Daten oder das Verbergen von Implementierungsdetails. Das folgende Beispiel ist von Nick Fitzgeralds Blogpost "Hiding Implementation Details with ECMAScript 6 WeakMaps". Die privaten Daten und Methoden, die zu dem Objekt gehören, werden in dem WeakMap Objekt privates gespeichert. Alles offene auf der Instanz und dem Prototyp ist Öffentlich; alles andere ist von Außen nicht erreichbar, weil privates vom Modul nicht exportiert wird.

+ +
const privates = new WeakMap();
+
+function Public() {
+  const me = {
+    // Private data goes here
+  };
+  privates.set(this, me);
+}
+
+Public.prototype.method = function() {
+  const me = privates.get(this);
+  // Do stuff with private data in `me`...
+};
+
+module.exports = Public;
+
+ +

Sets

+ +

Set Objekte

+ +

{{jsxref("Set")}} Objekte sind Collectionen mit Werten. Man kann über die Elemente in der Einfügereihenfolge iterieren. Ein Wert in einem Set kann nur einmal existieren und ist einzigartig in einer Set Collection.

+ +

Das folgende Beispiel zeigt einige Basisoperationen mit einem Set. Für mehr Beispiele und die komplette API siehe auf der {{jsxref("Set")}} Referenzseite nach.

+ +
var mySet = new Set();
+mySet.add(1);
+mySet.add('some text');
+mySet.add('foo');
+
+mySet.has(1); // true
+mySet.delete('foo');
+mySet.size; // 2
+
+for (let item of mySet) console.log(item);
+// 1
+// "some text"
+
+ +

Konvertierung zwischen Arrays und Sets

+ +

Man kann ein {{jsxref("Array")}} von einem Set erstellen, indem {{jsxref("Array.from")}} oder der spread Operator eingesetzt wird. Zudem akzeptiert der Set Konstruktor ein Array, um es in die andere Richtung zu konvertieren. Wichtig ist aber, dass Set Objekte Werte nur einmalig Speichern, so dass jedes Elementduplikat aus dem Array beim Konvertieren gelöscht wird.

+ +
Array.from(mySet);
+[...mySet2];
+
+mySet2 = new Set([1, 2, 3, 4]);
+
+ +

Array und Set im Vergleich

+ +

Traditionell wird eine Menge von Objekten in vielen Situationen in JavaScript in Arrays gespeichert. Das neue Set Objekt hat aber einige Vorteile:

+ + + +

WeakSet Objekte

+ +

{{jsxref("WeakSet")}} Objekte sind Collections von Objekten. Ein Objekt in einer WeakSet gibt es nur einmal; es ist einzigartig in der WeakSet Collection und Objekte sind nicht aufzählbar.

+ +

Die Hauptunterschiede zu einem {{jsxref("Set")}} Objekt sind:

+ + + +

Die Einsatzgebiete von WeakSet Objekten sind begrenzt. Sie erzeugen keine Speicherlecks, so dass sie sicher DOM Elemente enthalten können, um sie zum Beispiel zu verfolgen.

+ +

Schlüssel- und Wertegleichheit von Map und Set

+ +

Beide, die Schlüsselgleichheit von Map Objekten und die Wertegleichheit von Set Objekten basieren auf dem "same-value-zero Algorithmus":

+ + + +

{{PreviousNext("Web/JavaScript/Guide/Indexed_Collections", "Web/JavaScript/Guide/Working_with_Objects")}}

-- cgit v1.2.3-54-g00ecf