Articles

# ES6 způsob klonování pole 🐑

když potřebujeme kopírovat pole, často jsme použili slice. Ale s ES6 můžete také použít operátor šíření k duplikování pole. Docela šikovný, hned 🤩

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

Proč nemohu Použít = Kopírovat Pole?

Protože pole v JS jsou referenční hodnoty, takže při pokusu o kopírování pomocí = to bude jen kopírovat odkaz na původní pole a hodnota pole. Chcete-li vytvořit skutečnou kopii pole, musíte zkopírovat hodnotu pole pod novou proměnnou hodnoty. Tímto způsobem toto nové pole neodkazuje na starou adresu pole v paměti.

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

# problém s referenčními hodnotami

Pokud jste někdy řešili Redux nebo jakýkoli rámec správy státu. Budete vědět, neměnnost je velmi důležité. Dovolte mi to stručně vysvětlit. Neměnný objekt je objekt, u kterého nelze stav po jeho vytvoření změnit. Problém s JavaScriptem je, že arrays jsou proměnlivé. Takže se to může stát:

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

to je důvod, proč potřebujeme klonovat pole:

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

# Proměnlivých vs Neměnné Datové Typy

Proměnlivý:

  • objekt
  • pole
  • funkce

Neměnné:

Všechna primitiva jsou neměnné.

  • string
  • počet
  • boolean
  • null
  • undefined
  • symbol

# Mělké Kopie Pouze

poznámka spread jde pouze o jednu úroveň hlouběji při kopírování pole. Takže pokud se pokoušíte kopírovat vícerozměrná pole, budete muset použít jiné alternativy.

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);// , , ]

Here zde je zajímavá věc, kterou jsem se naučil. Mělká kopie znamená, že první úroveň je zkopírována, hlubší úrovně jsou odkazovány.

# komunitní vstup

# Array.z je Další Způsob, jak Klonovat Pole

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

_Thanks: @hakankaraduman _

  • _@hakankaraduman :_ ano, snažím se nepoužívat šíření, mate mě při čtení kódu, protože to dělá dvě věci, šíření nebo shromažďování podle kontextu

  • CJ J : myslím, že nejlepší způsob je ten, který nejvíce odpovídá sémantika operace. Dávám přednost použití Array.from