# ES6 måde at klone et Array på
når vi skal kopiere et array, brugte vi ofte slice. Men med ES6 kan du også bruge spredningsoperatøren til at duplikere et array. Pretty nifty, right
const sheeps = ;// Old wayconst cloneSheeps = sheeps.slice();// ES6 wayconst cloneSheepsES6 = ;
# hvorfor kan jeg ikke bruge = til at kopiere et Array?
fordi arrays i JS er referenceværdier, så når du forsøger at kopiere det ved hjælp af=
vil det kun kopiere referencen til det oprindelige array og ikke værdien af arrayet. For at oprette en reel kopi af et array skal du kopiere over værdien af arrayet under en ny værdivariabel. På den måde henviser dette nye array ikke til den gamle array-adresse i hukommelsen.
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 referenceværdier
Du vil vide uforanderlighed er super vigtigt. Lad mig kort forklare. Et uforanderligt objekt er et objekt, hvor staten ikke kan ændres, efter at den er oprettet. Problemet med JavaScript er, at arrays
er mutable. Så dette kan ske:
const sheeps = ;const sheeps2 = sheeps;sheeps2.push('🐺');console.log(sheeps2);// // Ahhh 😱 , our original sheeps have changed?!console.log(sheeps);//
derfor er vi nødt til at klone et array:
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 uforanderlige datatyper
Mutable:
- objekt
- array
- funktion
uforanderlig:
alle primitiver er uforanderlige.
- string
- nummer
- boolean
- null
- undefined
- symbol
# kun overfladisk kopi
Bemærkspread
går kun et niveau dybt, når du kopierer et array. Så hvis du prøver at kopiere en multidimensionel arrays, bliver du nødt til at bruge 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);// , , ]
Christ her er en interessant ting, jeg lærte. Overfladisk kopi betyder, at det første niveau kopieres, der henvises til dybere niveauer.
# community Input
# Array.fra er en anden måde at klone Array
const sheeps = ;const cloneSheeps = Array.from(sheeps);
_tak: @hakankaraduman _
-
_@hakankaraduman :_ ja, jeg prøver ikke at bruge spredning, det forvirrer mig, når jeg læser koden, fordi det gør to ting, spreder eller samler i henhold til kontekst
-
CJ j : jeg tror, at den bedste måde er den, der passer bedst til operationens semantik. Jeg foretrækker at bruge
Array.from
Leave a Reply