Articles

# ES6 Mod de a clona o matrice

atunci când avem nevoie pentru a copia o matrice, am folosit de multe ori felie. Dar cu ES6, puteți utiliza și operatorul de răspândire pentru a duplica o matrice. Destul de puturos, dreapta

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

# De ce nu pot folosi = pentru a copia o matrice?

deoarece matricele din JS sunt valori de referință, așa că atunci când încercați să o copiați folosind= va copia doar referința la matricea originală și nu valoarea matricei. Pentru a crea o copie reală a unui tablou, trebuie să copiați peste valoarea matricei sub o nouă variabilă de valoare. În acest fel, această nouă matrice nu se referă la vechea adresă de matrice din memorie.

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ă cu valorile de referință

dacă ați tratat vreodată cu Redux sau orice cadru de management de stat. Veți ști că imutabilitatea este foarte importantă. Permiteți-mi să explic pe scurt. Un obiect imuabil este un obiect în care starea nu poate fi modificată după ce este creată. Problema cu JavaScript este că arrays sunt mutabile. Deci, acest lucru se poate întâmpla:

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

De aceea trebuie să clonăm o matrice:

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

# tipuri de date mutabile vs imuabile

mutabile:

  • obiect
  • matrice
  • funcția

imuabil:

toate primitivele sunt imuabile.

  • string
  • număr
  • boolean
  • null
  • nedefinit
  • simbol

# copie superficială numai

vă rugăm să reținețispread merge doar un nivel adânc atunci când copiați o matrice. Deci, dacă încercați să copiați o matrice multidimensională, va trebui să utilizați alte alternative.

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

aici este un lucru interesant am învățat. Copie superficială înseamnă că primul nivel este copiat, se face referire la niveluri mai profunde.

# intrare comunitară

# matrice.de la este un alt mod de a clona matrice

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

_Thanks: @hakankaraduman _

  • _ @hakankaraduman :_ Da, încerc să nu folosesc spread, mă confundă când citesc codul pentru că face două lucruri, răspândirea sau adunarea în funcție de context

  • CJ J : cred că cea mai bună cale este cea care se potrivește cel mai bine semanticii operației. Prefer să folosesc Array.from