Как мы знаем в массивах и объектах Javascript, это ссылки, но какими способами мы можем сделать копию массива, не изменяя исходный массив позже, чем один?
Вот несколько способов сделать это:
Представьте, что у нас есть этот массив в вашем коде:
var arr = [1, 2, 3, 4, 5];
1) Цикл по массиву в функции и возврат нового массива, например так:
function newArr(arr) {
var i=0, res = [];
while(i<arr.length){
res.push(arr[i]);
i++;
}
return res;
}
2) Используя метод slice, slice предназначен для нарезки части массива, он будет нарезать некоторую часть вашего массива, не касаясь оригинала, в срезе, если не указать начало и конец массива, он будет нарезать весь массив массив и в основном сделать полную копию массива, поэтому мы можем легко сказать:
var arr2 = arr.slice(); // make a copy of the original array
3) Также контактный метод, это для объединения двух массивов, но мы можем просто указать один из массивов, и тогда это в основном сделает копию значений в новом контактируемом массиве:
var arr2 = arr.concat();
4) Также метод stringify и parse, не рекомендуется, но может быть простым способом скопировать Array и Objects:
var arr2 = JSON.parse(JSON.stringify(arr));
5) Метод Array.from, это широко не поддерживается, перед использованием проверьте поддержку в разных браузерах:
const arr2 = Array.from(arr);
6) Способ ECMA6, также не полностью поддерживается, но babelJs может помочь вам, если вы хотите перейти:
const arr2 = [...arr];
slice
иsplice
операции, а также новый оператор распространения иArray.from
значительно медленнее реализация. Посмотрите на perfjs.fnfo