Articles

# ES6 sposób klonowania tablicy 🐑

kiedy musimy skopiować tablicę, często używamy slice. Ale z ES6, można również użyć operatora spread do powielenia tablicy. Całkiem fajne, prawda 🤩

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

# dlaczego nie mogę użyć = do skopiowania tablicy?

ponieważ tablice w JS są wartościami referencyjnymi, więc gdy spróbujesz skopiować je za pomocą= skopiuje tylko odniesienie do oryginalnej tablicy, a nie wartość tablicy. Aby utworzyć prawdziwą kopię tablicy, musisz skopiować wartość tablicy pod nową zmienną value. W ten sposób nowa tablica nie odwołuje się do starego adresu tablicy w pamięci.

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 z wartościami odniesienia

Jeśli kiedykolwiek miałeś do czynienia z Redux lub jakimkolwiek frameworkiem zarządzania stanem. Będziesz wiedział, że niezmienność jest bardzo ważna. Pozwól, że krótko wyjaśnię. Obiekt niezmienny to obiekt, którego stanu nie można modyfikować po jego utworzeniu. Problem z JavaScript polega na tym, że arrays są mutowalne. Więc to może się zdarzyć:

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

dlatego musimy sklonować tablicę:

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 Immutable Data Types

Mutable:

  • object
  • array
  • funkcja

immutable:

wszystkie prymitywy są niezmienne.

  • string
  • liczba
  • boolean
  • null
  • undefined
  • symbol

# Shallow Copy Only

zwróć uwagę, żespread podczas kopiowania tablicy sięga tylko jednego poziomu. Więc jeśli próbujesz skopiować tablice wielowymiarowe, będziesz musiał użyć innych alternatyw.

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

oto ciekawa rzecz, której się nauczyłem. Płytka Kopia oznacza, że kopiowany jest pierwszy poziom, odsyła się do głębszych poziomów.

# Community Input

# Array.z jest inny sposób klonowania tablicy

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

_Thanks: @hakankaraduman _

  • _ @ hakankaraduman :_ tak, staram się nie używać spread, myli mnie to podczas czytania kodu, ponieważ robi dwie rzeczy, rozprzestrzenia się lub gromadzi zgodnie z kontekstem

  • CJ J : myślę, że najlepszym sposobem jest ten, który najbardziej pasuje do semantyki operacji. Wolę używać Array.from