Come sappiamo in matrici e oggetti Javascript sono di riferimento, ma quali modi possiamo fare per copiare l'array senza cambiare l'array originale in un secondo momento?
Ecco alcuni modi per farlo:
Immagina di avere questo array nel tuo codice:
var arr = [1, 2, 3, 4, 5];
1) Effettuare il looping dell'array in una funzione e restituire un nuovo array, in questo modo:
function newArr(arr) {
var i=0, res = [];
while(i<arr.length){
res.push(arr[i]);
i++;
}
return res;
}
2) Usando il metodo slice, slice è per tagliare parte dell'array, taglierà parte dell'array senza toccare l'originale, nella sezione, se non specifichi l'inizio e la fine dell'array, taglierà l'intero array e fondamentalmente facciamo una copia completa dell'array, quindi possiamo facilmente dire:
var arr2 = arr.slice(); // make a copy of the original array
3) Anche metodo di contatto, questo è per unire due array, ma possiamo semplicemente specificare uno degli array e quindi fondamentalmente fare una copia dei valori nel nuovo array contattato:
var arr2 = arr.concat();
4) Ricalca e analizza anche il metodo, non è raccomandato, ma può essere un modo semplice per copiare Array e Oggetti:
var arr2 = JSON.parse(JSON.stringify(arr));
5) Metodo Array.from, questo non è ampiamente supportato, prima dell'uso controlla il supporto in diversi browser:
const arr2 = Array.from(arr);
6) Modo ECMA6, anche non completamente supportato, ma babelJs può aiutarti se vuoi traspilare:
const arr2 = [...arr];
slice
esplice
operazioni e un nuovo operatore di diffusione eArray.from
un'implementazione molto più lenta. Guarda perfjs.fnfo