Articles

# ES6 Måte Å Klone En matrise 🐑

når vi trenger å kopiere en matrise, brukte vi ofte slice. MEN MED ES6 kan DU også bruke spredningsoperatoren til å duplisere en matrise. Ganske kjekk, riktig 🤩

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

# Hvorfor Kan jeg Ikke Bruke = Å Kopiere En Matrise?

fordi matriser I JS er referanseverdier, så når du prøver å kopiere den med = vil den bare kopiere referansen til den opprinnelige matrisen og ikke verdien av matrisen. For å opprette en ekte kopi av en matrise, må du kopiere over verdien av matrisen under en ny verdivariabel. På den måten refererer denne nye matrisen ikke til den gamle matriseadressen i minnet.

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 med Referanseverdier

Hvis Du noen gang jobbet Med Redux eller noen statlig styringsramme. Du vil vite uforanderlighet er super viktig. La meg kort forklare. Et uforanderlig objekt er et objekt der staten ikke kan endres etter at den er opprettet. Problemet med JavaScript er at arrays er mutable. Så dette kan skje:

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

Det er derfor vi trenger å klone en matrise:

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

# Foranderlig vs Uforanderlige Datatyper

Foranderlig:

  • objekt
  • matrise
  • funksjon

uforanderlig:

alle primitiver er uforanderlige.

  • streng
  • nummer
  • boolsk
  • null
  • undefined
  • symbol

# Grunne Kopi Bare

vær oppmerksom spread går bare ett nivå dypt når du kopierer en matrise. Så hvis du prøver å kopiere en flerdimensjonal arrays, må du bruke andre alternativer.

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

🤓 her er en interessant ting jeg lærte. Grunne kopier betyr det første nivået er kopiert, dypere nivåer er referert.

# Fellesskapsinngang

# Array.fra Er En Annen Måte Å Klone Array

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

_takk: @hakankaraduman _

  • _ @ hakankaraduman :_ ja, jeg prøver ikke å bruke spread, det forvirrer meg når jeg leser koden fordi den gjør to ting, sprer eller samler i henhold til kontekst

  • CJ J : JEG tror den beste måten er den som passer best til operasjonens semantikk. Jeg foretrekker å bruke Array.from