Object.keys, values, entries

Lassen Sie uns von den einzelnen Datenstrukturen weggehen und über die Iterationen über sie sprechen.

Im vorigen Kapitel haben wir die Methoden map.keys(), map.values(), map.entries() gesehen.

Diese Methoden sind generisch, es gibt eine gemeinsame Vereinbarung, sie für Datenstrukturen zu verwenden. Wenn wir jemals eine eigene Datenstruktur erstellen, sollten wir sie auch implementieren.

Sie werden unterstützt für:

  • Map
  • Set
  • Array

Plain-Objekte unterstützen auch ähnliche Methoden, aber die Syntax ist ein wenig anders.

Object.keys, values, entries

Für einfache Objekte sind die folgenden Methoden verfügbar:

  • Object.keys(obj) – gibt ein Array von Schlüsseln zurück.
  • Object.values(obj) – gibt ein Array von Werten zurück.
  • Object.entries(obj) – gibt ein Array von Paaren zurück.

Bitte beachten Sie die Unterschiede (z.B. im Vergleich zu map):

Map Objekt
Aufrufsyntax map.keys() Object.keys(obj), aber nicht obj.keys()
Returns iterable „real“ Array

Der erste Unterschied ist, dass wir Object.keys(obj) aufrufen müssen, und nicht obj.keys().

Warum das? Der Hauptgrund ist die Flexibilität. Denken Sie daran, dass Objekte die Grundlage aller komplexen Strukturen in JavaScript sind. Wir können also ein eigenes Objekt wie data haben, das seine eigene Methode data.values() implementiert. Und wir können immer noch Object.values(data) darauf aufrufen.

Der zweite Unterschied ist, dass Object.*-Methoden „echte“ Array-Objekte zurückgeben, nicht nur eine Iterable. Das ist hauptsächlich aus historischen Gründen so.

Zum Beispiel:

let user = { name: "John", age: 30};

  • Object.keys(user) =
  • Object.values(user) =
  • Object.entries(user) = , ]

Hier ist ein Beispiel für die Verwendung von Object.values, um über Eigenschaftswerte zu schleifen:

let user = { name: "John", age: 30};// loop over valuesfor (let value of Object.values(user)) { alert(value); // John, then 30}

Object.keys/values/entries ignorieren symbolische Eigenschaften

Genauso wie eine for..in-Schleife ignorieren diese Methoden Eigenschaften, die Symbol(...) als Schlüssel verwenden.

Gemeinsam ist das praktisch. Aber wenn wir auch symbolische Schlüssel wollen, dann gibt es eine separate Methode Object.getOwnPropertySymbols, die ein Array mit ausschließlich symbolischen Schlüsseln zurückgibt. Außerdem gibt es eine Methode Reflect.ownKeys(obj), die alle Schlüssel zurückgibt.

Transforming objects

Objects fehlen viele Methoden, die für Arrays existieren, z.B. map, filter und andere.

Wenn wir sie anwenden wollen, dann können wir Object.entries gefolgt von Object.fromEntries verwenden:

  1. Verwenden Sie Object.entries(obj), um ein Array von Schlüssel/Wert-Paaren aus obj zu erhalten.
  2. Benutze Array-Methoden für dieses Array, z.B. map.
  3. Benutze Object.fromEntries(array) für das resultierende Array, um es wieder in ein Objekt zu verwandeln.

Wir haben zum Beispiel ein Objekt mit Preisen und möchten diese verdoppeln:

let prices = { banana: 1, orange: 2, meat: 4,};let doublePrices = Object.fromEntries( // convert to array, map, and then fromEntries gives back the object Object.entries(prices).map(() => ));alert(doublePrices.meat); // 8

Auf den ersten Blick mag das schwierig aussehen, aber nach ein- oder zweimaliger Anwendung wird es leicht verständlich. Wir können auf diese Weise mächtige Ketten von Transformationen machen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.