Al copiar un array en JavaScript a otro array:
var arr1 = ['a','b','c'];
var arr2 = arr1;
arr2.push('d'); //Now, arr1 = ['a','b','c','d']
Me he dado cuenta de que arr2
se refiere al mismo array que arr1
, en lugar de un nuevo array independiente. ¿Cómo puedo copiar el array para obtener dos arrays independientes?
Usa esto:
var newArray = oldArray.slice();
Básicamente, la operación slice()
clona el array y devuelve una referencia a un nuevo array.
Para referencias, cadenas y números (y no el objeto real), slice()
copia las referencias del objeto en el nuevo array. Tanto el array original como el nuevo se refieren al mismo objeto. Si un objeto referenciado cambia, los cambios son visibles tanto en el nuevo array como en el original.
Las primitivas como las cadenas y los números son inmutables, por lo que los cambios en la cadena o el número son imposibles.
No se necesita jQuery... [Ejemplo de trabajo][1]
var arr2 = arr1.slice()
Esto copia el array desde la posición inicial 0
hasta el final del array.
Es importante notar que funcionará como se espera para los tipos primitivos (cadena, número, etc.), y explicar también el comportamiento esperado para los tipos de referencia...
Si tienes un array de tipos de referencia, digamos de tipo Objeto
. El array se copiará, pero ambos arrays contendrán referencias a los mismos Objetos
. Así que en este caso parecería que el array es copiado por referencia aunque el array sea realmente copiado.
Si quieres hacer una nueva copia de un objeto o matriz, debes copiar explícitamente las propiedades del objeto o los elementos de la matriz, por ejemplo:
var arr1 = ['a','b','c'];
var arr2 = [];
for (var i=0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
Puedes buscar más información en Google sobre los valores primitivos inmutables y las referencias a objetos mutables.