Como copiar array em javascript por valor e não por referencia

image_pdfimage_print

Rápido, simples e direto:

copia_array = array.slice()

Abaixo um demonstração da importância e da diferença entre uma mera atribuição e a cópia.

var arr_original = [0,1,2,3];
//Atribuição por referência
var arr_copia_referencia = arr_original;

//Atribuição por valor
var array_copia_valor = arr_original.slice();

//Remove o primeiro elemento do array original
arr_original.pop();

//Verificando o valor do array original, verificamos que o mesmo foi modificado
console.log(arr_original); //[1,2,3];

//O array cópia por referência também foi afetada
console.log(arr_copia_referencia); //[1,2,3];

//Mas o array que recebeu a atribuição por cópia não foi afetado
console.log(array_copia_valor);

//Agora, alterando o array por referência
arr_copia_referencia.pop();

//Verificando o valor do array original, verificamos que o mesmo foi modificado
console.log(arr_original); //[2,3];

//O array cópia por referência foi afetado, como esperado
console.log(arr_copia_referencia); //[2,3];

//Mas o array que recebeu a atribuição por cópia não foi afetado em nenhuma das vezes
console.log(array_copia_valor);

Este comportamento ocorre como esperado, visto que em Javascript, array é um objeto. E objeto são atribuidos por referência. Seja com o uso do igual, seja através de passagem de argumento em uma função.

Tenha muita atenção. Alterações efetuadas dentro de uma função neste caso, com um array passado como argumento, irá afetar o valor do array fora da função, se o mesmo for modificado dentro da função.

Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!