# ES6 módon klónozni egy tömb 🐑
ha kell másolni egy tömb, gyakran használt szelet. De az ES6 segítségével a spread operátort is használhatja egy tömb másolására. Szép remek, jobb 🤩
const sheeps = ;// Old wayconst cloneSheeps = sheeps.slice();// ES6 wayconst cloneSheepsES6 = ;
# miért nem használhatom = egy tömb másolásához?
mivel a JS-ben lévő tömbök referenciaértékek, ezért amikor a =
használatával próbálja másolni, csak az eredeti tömbre való hivatkozást másolja, nem pedig a tömb értékét. Egy tömb valódi példányának létrehozásához át kell másolnia a tömb értékét egy új értékváltozó alatt. Így ez az új tömb nem utal a régi tömb címére a memóriában.
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
# probléma a referenciaértékekkel
Ha valaha foglalkozott a Redux-szal vagy bármely állami irányítási kerettel. Tudni fogja, hogy a változhatatlanság szuper fontos. Hadd magyarázzam el röviden. A megváltoztathatatlan objektum olyan objektum, ahol az állapot nem módosítható a létrehozás után. A JavaScript problémája az, hogy a arrays
módosítható. Tehát ez megtörténhet:
const sheeps = ;const sheeps2 = sheeps;sheeps2.push('🐺');console.log(sheeps2);// // Ahhh 😱 , our original sheeps have changed?!console.log(sheeps);//
ezért kell, hogy a klón egy tömb:
const sheeps = ;const sheeps2 = ;// Let's change our sheeps2 arraysheeps2.push('🐺');console.log(sheeps2);// // ✅ Yay, our original sheeps is not affected!console.log(sheeps);//
# Változékony vs Megváltoztathatatlan adattípusok
Változékony:
- objektum
- array
- függvény
Megváltoztathatatlan:
Minden primitívek vannak megváltoztathatatlan.
- string
- number
- boolean
- null
- undefined
- symbol
# Shallow Copy Only
kérjük, vegye figyelembe spread
csak egy szint mélyre megy egy tömb másolásakor. Tehát, ha többdimenziós tömböket próbál másolni, akkor más alternatívákat kell használnia.
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);// , , ]
🤓 itt egy érdekes dolog, amit megtanultam. A sekély másolat azt jelenti, hogy az első szintet lemásolják, a mélyebb szintekre hivatkoznak.
# community Input
# Array.innen egy másik módja annak, hogy klón Array
const sheeps = ;const cloneSheeps = Array.from(sheeps);
_Thanks: @hakankaraduman _
-
_ @hakankaraduman :_ igen, megpróbálom nem használni a spread-et, összezavarja a kód olvasásakor, mert két dolgot csinál, terjesztés vagy összegyűjtés a kontextus szerint
-
CJ J : úgy gondolom, hogy a legjobb módszer az, amely leginkább megfelel a művelet szemantikájának. Inkább a
Array.from
Leave a Reply