Articles

# ES6 Modo per clonare un array

Quando abbiamo bisogno di copiare un array, abbiamo spesso usato slice. Ma con ES6, puoi anche usare l’operatore spread per duplicare un array. Abbastanza elegante, giusto

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

# Perché non posso usare = per copiare un array?

Poiché gli array in JS sono valori di riferimento, quindi quando si tenta di copiarlo utilizzando= copierà solo il riferimento all’array originale e non il valore dell’array. Per creare una copia reale di un array, è necessario copiare il valore dell’array in una nuova variabile di valore. In questo modo questo nuovo array non fa riferimento al vecchio indirizzo array in memoria.

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

# Problema con i valori di riferimento

Se hai mai affrontato Redux o qualsiasi framework di gestione dello stato. Saprete immutabilità è super importante. Lasciatemi spiegare brevemente. Un oggetto immutabile è un oggetto in cui lo stato non può essere modificato dopo la sua creazione. Il problema con JavaScript è che arrays sono mutabili. Quindi questo può accadere:

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

ecco perché abbiamo bisogno di clonare un 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);// 

# Mutevole vs Dati Immutabili Tipi

Mutevole:

  • oggetto
  • array
  • funzione

Immutabile:

Tutte le primitive sono immutabili.

  • stringa
  • numero
  • booleano
  • null
  • undefined
  • simbolo

# Solo copia superficiale

Si prega di notarespread va solo un livello profondo quando si copia un array. Quindi, se stai cercando di copiare un array multidimensionali, dovrai usare altre 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);// , , ]

Here Ecco una cosa interessante che ho imparato. Copia superficiale significa che il primo livello viene copiato, i livelli più profondi sono referenziati.

# Ingresso comunità

# Array.from è un altro modo per clonare Array

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

_Thanks: @hakankaraduman _

  • _ @ hakankaraduman :_ sì, cerco di non usare spread, mi confonde quando leggo il codice perché fa due cose, diffondendo o raccogliendo in base al contesto

  • CJ J : Penso che il modo migliore sia quello che più si avvicina alla semantica dell’operazione. Preferisco usare Array.from