Articles

# 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