Como sabemos em matrizes e objetos Javascript são por referência, mas de que maneiras podemos copiar a matriz sem alterar a matriz original posteriormente?
Aqui estão algumas maneiras de fazer isso:
Imagine que temos essa matriz em seu código:
var arr = [1, 2, 3, 4, 5];
1) Fazendo loop na matriz em uma função e retornando uma nova matriz, assim:
function newArr(arr) {
var i=0, res = [];
while(i<arr.length){
res.push(arr[i]);
i++;
}
return res;
}
2) Usando o método de fatia, fatia é para fatiar parte da matriz, fatiará parte de sua matriz sem tocar no original, na fatia, se não especificar o início e o fim da matriz, fatiará todo matriz e basicamente fazer uma cópia completa da matriz, para que possamos dizer facilmente:
var arr2 = arr.slice(); // make a copy of the original array
3) Também entre em contato com o método, isto é para mesclar duas matrizes, mas podemos apenas especificar uma das matrizes e, basicamente, fazer uma cópia dos valores na nova matriz contatada:
var arr2 = arr.concat();
4) Também método stringify e parse, não é recomendado, mas pode ser uma maneira fácil de copiar Array e Objetos:
var arr2 = JSON.parse(JSON.stringify(arr));
5) Método Array.from, isso não é amplamente suportado, antes de usar, verifique o suporte em diferentes navegadores:
const arr2 = Array.from(arr);
6) Maneira ECMA6, também não totalmente suportada, mas o babelJs pode ajudá-lo se você deseja transpilar:
const arr2 = [...arr];
slice
esplice
operações interessantes e novo operador de propagação eArray.from
implementação muito mais lenta. Veja perfjs.fnfo