# 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
Leave a Reply