Articles

# ES6 Forma de Clonar una matriz <

Cuando necesitamos copiar una matriz, a menudo usamos slice. Pero con ES6, también puede usar el operador de propagación para duplicar una matriz. Bastante ingenioso, correcto

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

# ¿Por qué no puedo Usar = para Copiar una Matriz?

Porque los arrays en JS son valores de referencia, por lo que cuando intente copiarlos usando el = solo copiará la referencia al array original y no el valor del array. Para crear una copia real de una matriz, debe copiar el valor de la matriz bajo una nueva variable de valor. De esta manera, esta nueva matriz no hace referencia a la dirección de la matriz antigua en 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 los valores de referencia

Si alguna vez ha tratado con Redux o cualquier marco de administración de estado. Sabrás que la inmutabilidad es muy importante. Permítanme explicarles brevemente. Un objeto inmutable es un objeto en el que el estado no se puede modificar después de su creación. El problema con JavaScript es que arrays son mutables. Así que esto puede suceder:

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

es por eso Que necesitamos para clonar una matriz:

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 Inmutable Tipos de Datos

Mutable:

  • objeto
  • array
  • función

Inmutable:

Todos los tipos primitivos son inmutables.

  • string
  • number
  • booleano
  • null
  • undefined
  • symbol

# Solo Copia superficial

Tenga en cuenta que spread solo llega a un nivel de profundidad al copiar una matriz. Así que si estás tratando de copiar matrices multidimensionales, tendrás que usar otras alternativas.

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 He aquí una cosa interesante que aprendí. Copia superficial significa que se copia el primer nivel, se hace referencia a los niveles más profundos.

# Entrada de la comunidad

# Array.es Otra Manera de Clonar Matriz

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

_Thanks: @hakankaraduman _

  • _@hakankaraduman :_ sí, trato de no usar spread, me confunde al leer el código porque hace dos cosas, spread o gathering de acuerdo al contexto

  • CJ J : Creo que la mejor manera es la que más se acerque a la semántica de la operación. Prefiero usar Array.from