# ES6 tapa kloonata Array 🐑
kun meidän täytyy kopioida array, usein käytetään viipaletta. Mutta ES6, voit myös käyttää leviämisen operaattori kopioida array. Pretty nifty, right 🤩
const sheeps = ;// Old wayconst cloneSheeps = sheeps.slice();// ES6 wayconst cloneSheepsES6 = ;
# Why Can ’ t I Use = to Copy an Array?
koska JS: n matriisit ovat viitearvoja, joten kun yrität kopioida sen käyttämällä =
se kopioi vain viittauksen alkuperäiseen matriisiin eikä matriisin arvoa. Jotta voit luoda todellisen kopion array, sinun täytyy kopioida yli arvo array alle Uusi arvo muuttuja. Siten tämä uusi matriisi ei viittaa vanhaan matriisin osoitteeseen muistissa.
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
# viitearvojen ongelma
Jos olet joskus käsitellyt Reduxia tai jotain valtion johtamisjärjestelmää. Muuttumattomuus on erittäin tärkeää. Selitän lyhyesti. Muuttumaton objekti on objekti, jossa tilaa ei voi muuttaa sen luomisen jälkeen. JavaScriptin ongelma on se, että arrays
ovat muunneltavissa. Näin voi siis käydä:
const sheeps = ;const sheeps2 = sheeps;sheeps2.push('🐺');console.log(sheeps2);// // Ahhh 😱 , our original sheeps have changed?!console.log(sheeps);//
That ’ s why we need to clone an 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 Immutable Data Types
Mutable:
- object
- funktio
array
muuttumaton:
kaikki primitiivit ovat muuttumattomia.
- string
- boolean
- määrittelemätön
- symboli
-
_@hakankaraduman :_ yes, I try not to use spread, it confuses me when reading the code because it does two things, spreading or gathering according to context
number
ull
# Shallow Copy Only
huomaa spread
menee vain yhden tason syvälle kopioitaessa jonoa. Joten jos yrität kopioida moniulotteisia taulukoita, sinun täytyy käyttää muita vaihtoehtoja.
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);// , , ]
🤓 tässä on mielenkiintoinen asia, jonka opin. Shallow copy tarkoittaa, että ensimmäinen taso kopioidaan, syvemmät tasot viitataan.
# Yhteisötulo
# Array.from is Another Way to Clone Array
const sheeps = ;const cloneSheeps = Array.from(sheeps);
_Thanks: @hakankaraduman _
CJ J : I think the best way is the one that most closely matches the semantics of the operation. Mieluummin Array.from
Leave a Reply