Como sabemos en Javascript, las matrices y los objetos son por referencia, pero ¿de qué maneras podemos copiar la matriz sin cambiar la matriz original más adelante?
Aquí hay algunas formas de hacerlo:
Imagina que tenemos esta matriz en tu código:
var arr = [1, 2, 3, 4, 5];
1) Recorrer la matriz en una función y devolver una nueva matriz, como esta:
function newArr(arr) {
var i=0, res = [];
while(i<arr.length){
res.push(arr[i]);
i++;
}
return res;
}
2) Usando el método de división, la división es para dividir parte de la matriz, dividirá parte de su matriz sin tocar el original, en la división, si no especifica el inicio y el final de la matriz, dividirá la totalidad matriz y básicamente hacer una copia completa de la matriz, para que podamos decir fácilmente:
var arr2 = arr.slice(); // make a copy of the original array
3) También método de contacto, esto es para fusionar dos matrices, pero solo podemos especificar una de las matrices y luego básicamente hacer una copia de los valores en la nueva matriz contactada:
var arr2 = arr.concat();
4) También se recomienda el método stringify y parse, no se recomienda, pero puede ser una forma fácil de copiar Array y Objetos:
var arr2 = JSON.parse(JSON.stringify(arr));
5) Método Array.from, esto no es ampliamente compatible, antes del uso verifique el soporte en diferentes navegadores:
const arr2 = Array.from(arr);
6) Modo ECMA6, tampoco totalmente compatible, pero babelJs puede ayudarlo si desea transpilar:
const arr2 = [...arr];
slice
ysplice
operaciones geniales y un nuevo operador extendido yArray.from
tenemos una implementación mucho más lenta. Mira perfjs.fnfo