3 Wege zum flachen Klonen von Objekten in JavaScript (mit Boni)

In diesem Beitrag finden Sie 3 einfache Wege, um einen flachen Klon (auch bekannt als Kopie) von Objekten in JavaScript durchzuführen.

Als Bonus zeige ich, wie Sie auch Eigenschaften an Ort und Stelle auf dem Klon aktualisieren, hinzufügen oder entfernen können. Das ist nützlich, wenn Sie eine Aktualisierung des Objekts auf unveränderliche Weise durchführen wollen.

Hinweis

Die 3 in diesem Beitrag beschriebenen Möglichkeiten, Objekte zu klonen, führen eine oberflächliche Kopie durch.

Eine oberflächliche Kopie bedeutet, dass nur das eigentliche Objekt kopiert wird. Wenn das kopierte Objekt verschachtelte Objekte enthält – werden diese verschachtelten Objekte nicht geklont.

Inhaltsverzeichnis

  • 1. Klonen mit Object Spread
  • 2. Klonen mit Object Rest
  • 3. Klonen mit Object.assign()
  • 4. Zusammenfassung

1. Klonen mit Object.spread

Der einfachste Weg, ein einfaches JavaScript-Objekt zu klonen, ist der Aufruf des Object.spread-Operators:

const clone = { ...object};

Wobei object das Objekt ist, das Sie kopieren möchten, und clone die flache Kopie von object ist.

Zum Beispiel wollen wir eine flache Kopie des Objekts hero erstellen:

const hero = { name: 'Batman', city: 'Gotham'};const heroClone = { ...hero};heroClone; // { name: 'Batman', city: 'Gotham' }hero === heroClone; // => false

heroClone ist ein Klonobjekt von hero, das heißt, es enthält alle Eigenschaften von hero.

hero === heroClone wird zu false ausgewertet – hero und heroClone sind jedoch unterschiedliche Objektinstanzen.

1.1 Objektverteilungs-Bonus: Hinzufügen oder Aktualisieren von geklonten Requisiten

Ein unmittelbarer Vorteil der Verwendung von Objektverteilungen ist, dass Sie das geklonte Objekt an Ort und Stelle aktualisieren oder neue Eigenschaften hinzufügen können, wenn Sie dies benötigen.

Lassen Sie uns das hero Objekt klonen, aber die name Eigenschaft auf einen anderen Wert aktualisieren und eine neue Eigenschaft realName hinzufügen:

const hero = { name: 'Batman', city: 'Gotham'};const heroEnhancedClone = { ...hero, name: 'Batman Clone', realName: 'Bruce Wayne'};heroEnhancedClone; // { name: 'Batman Clone', city: 'Gotham', realName: 'Bruce Wayne' }

2. Klonen mit Objektrest

Eine weitere gute Möglichkeit, Objekte oberflächlich zu klonen, ist die Verwendung des Objektrest-Operators:

const { ...clone } = object;

Auch hier wollen wir den Rest-Operator verwenden, um eine Kopie des hero Objekts zu erstellen:

const hero = { name: 'Batman', city: 'Gotham'};const { ...heroClone } = hero;heroClone; // { name: 'Batman', city: 'Gotham' }hero === heroClone; // => false

Nach Anwendung des Rest-Operators const { ...heroClone } = hero enthält die Variable heroClone eine Kopie des Objekts hero.

2.1 Bonus von Object Rest: Überspringen von geklonten Requisiten

Ein netter Bonus bei der Verwendung von Object Rest ist die Möglichkeit, bestimmte Eigenschaften beim Klonen zu überspringen.

Erzeugen wir zum Beispiel einen Klon des hero Objekts, überspringen aber die city Eigenschaft im Klon:

const hero = { name: 'Batman', city: 'Gotham'};const { city, ...heroClone } = hero;heroClone; // { name: 'Batman' }

2.2 Super-Bonus: Kombination von Objektspreizung und Rest

Objektspreizung bringt den Bonus, Eigenschaften zu aktualisieren oder neu hinzuzufügen, während Objektrest den Vorteil hat, Eigenschaften im resultierenden Klon zu überspringen.

Kann man object spread und rest in einer Anweisung kombinieren, um alle diese Vorteile zu erben? Ja, das können Sie!

Lassen Sie uns das hero-Objekt klonen und dabei eine neue Eigenschaft realName hinzufügen und die Eigenschaft city überspringen:

const hero = { name: 'Batman', city: 'Gotham'};const { city, ...heroClone } = { ...hero, realName: 'Bruce Wayne'};heroClone; // { name: 'Batman', realName: 'Bruce Wayne' }

Das Klonen von Objekten und die Manipulation von Eigenschaften in einer einzigen Anweisung zu kombinieren, ist toll!

3. Klonen mit Object.assign()

Schließlich können Sie mit Object.assign(target, ...sources) auch das Klonen von Objekten durchführen:

const clone = Object.assign({}, object);

Lassen Sie uns Object.assign() in der Praxis verwenden und ein Klon-Objekt von hero Objekt erzeugen:

const hero = { name: 'Batman', city: 'Gotham'};const heroClone = Object.assign({}, hero);heroClone; // { name: 'Batman', city: 'Gotham' }hero === heroClone; // => false

Object.assign({}, hero) erzeugt einen Klon des hero Objekts, indem das zweite Argument hero in das erste Argument {} eingebunden wird.

3.1 Object.assign()-Bonus: geklonte Requisiten hinzufügen oder aktualisieren

Object.assign() ermöglicht auch das Aktualisieren oder Hinzufügen neuer Eigenschaften zum Klon.

Lassen Sie uns das hero Objekt kopieren, aber gleichzeitig die name Eigenschaft aktualisieren:

const hero = { name: 'Batman', city: 'Gotham'};const heroClone = Object.assign({}, hero, { name: 'Batman Clone' });heroClone; // { name: 'Batman Clone', city: 'Gotham' }

Object.assign({}, hero, { name: 'Batman Clone' }) erstellt das Objekt in 2 Schritten.

Zunächst wird das zweite Argument hero mit dem ersten Argument {} zusammengeführt. Dies entspricht dem { name: 'Batman', city: 'Gotham' }.

Zweitens wird das dritte Argument { name: 'Batman Clone' } in das Ergebnis aus dem vorherigen Schritt gemischt und überschreibt die Eigenschaft name. Schließlich erhält man das Objekt { name: 'Batman Clone', city: 'Gotham' }.

4. Zusammenfassung

JavaScript bietet 3 gute Möglichkeiten, Objekte zu klonen: mit dem Spread-Operator, dem Rest-Operator und der Object.assign()-Funktion.

Neben dem reinen Klonen von Objekten ermöglicht die Verwendung von object spread und Object.assign() das Hinzufügen oder Aktualisieren von Eigenschaften beim Erstellen des Klons.

Der Rest-Operator bietet außerdem den Vorteil, dass bestimmte Eigenschaften beim Klonen übersprungen werden können.

Und das Tolle ist, dass Sie die Objektausbreitung und den Rest in einer einzigen Anweisung kombinieren können, so dass Sie das Objekt klonen und gleichzeitig Eigenschaften hinzufügen, aktualisieren oder überspringen können, die nicht geklont werden.

Das ist nützlich, wenn Sie die Unveränderlichkeit nutzen möchten und die Eigenschaften des geklonten Objekts an Ort und Stelle manipulieren können.

Welche anderen guten Möglichkeiten, Objekte in JavaScript zu klonen, kennen Sie?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.