Articles

# ES6 Methode zum Klonen eines Arrays 🐑

Wenn wir ein Array kopieren müssen, haben wir oft Slice verwendet. Mit ES6 können Sie jedoch auch den Spread-Operator verwenden, um ein Array zu duplizieren. Ziemlich raffiniert, richtig 🤩

const sheeps = ;// Old wayconst cloneSheeps = sheeps.slice();// ES6 wayconst cloneSheepsES6 = ;

# Warum kann ich = nicht verwenden, um ein Array zu kopieren?

Da Arrays in JS Referenzwerte sind, wird beim Kopieren mit = nur der Verweis auf das ursprüngliche Array kopiert und nicht der Wert des Arrays. Um eine echte Kopie eines Arrays zu erstellen, müssen Sie den Wert des Arrays unter einer neuen Wertvariablen kopieren. Auf diese Weise verweist dieses neue Array nicht auf die alte Array-Adresse im Speicher.

const sheeps = ;const fakeSheeps = sheeps;const cloneSheeps = ;console.log(sheeps === fakeSheeps);// true --> it's pointing to the same memory spaceconsole.log(sheeps === cloneSheeps);// false --> it's pointing to a new memory space

# Problem mit Referenzwerten

Wenn Sie sich jemals mit Redux oder einem State Management Framework befasst haben. Sie werden wissen, dass Unveränderlichkeit sehr wichtig ist. Lassen Sie mich kurz erklären. Ein unveränderliches Objekt ist ein Objekt, dessen Status nach seiner Erstellung nicht geändert werden kann. Das Problem mit JavaScript ist, dass arrays veränderbar sind. Das kann also passieren:

const sheeps = ;const sheeps2 = sheeps;sheeps2.push('🐺');console.log(sheeps2);// // Ahhh 😱 , our original sheeps have changed?!console.log(sheeps);// 

Deshalb müssen wir ein Array klonen:

const sheeps = ;const sheeps2 = ;// Let's change our sheeps2 arraysheeps2.push('🐺');console.log(sheeps2);// // ✅ Yay, our original sheeps is not affected!console.log(sheeps);// 

# Mutable vs Unveränderliche Datentypen

Mutable:

  • Objekt
  • array
  • Funktion

Unveränderlich:

Alle Grundelemente sind unveränderlich.

  • string
  • number
  • boolean
  • null
  • undefined
  • symbol

# Nur flache Kopie

Bitte beachten Sie, dass spread beim Kopieren eines Arrays nur eine Ebene tiefer geht. Wenn Sie also versuchen, ein mehrdimensionales Array zu kopieren, müssen Sie andere Alternativen verwenden.

const nums = , ];const cloneNums = ;// Let's change the first item in the first nested item in our cloned array.cloneNums = '👻';console.log(cloneNums);// , , ]// NOOooo, the original is also affectedconsole.log(nums);// , , ]

🤓 Hier ist eine interessante Sache, die ich gelernt habe. Flache Kopie bedeutet, dass die erste Ebene kopiert wird, tiefere Ebenen werden referenziert.

# Community-Eingabe

# Array.es gibt eine andere Möglichkeit, Array zu klonen

const sheeps = ;const cloneSheeps = Array.from(sheeps);

_danke: @hakankaraduman _

  • _@hakankaraduman :_ ja, ich versuche, spread nicht zu verwenden, es verwirrt mich beim Lesen des Codes, weil es zwei Dinge tut, sich je nach Kontext zu verbreiten oder zu sammeln

  • CJ J : Ich denke, der beste Weg ist derjenige, der der Semantik der Operation am nächsten kommt. Ich bevorzuge Array.from