Як ми знаємо, у масивах 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, фрагмент призначений для нарізання частини масиву, він буде фрагментувати частину масиву, не торкаючись оригіналу, в фрагменті, якщо не вказати початок і кінець масиву, він розріже весь масив і в основному зробити повну копію масиву, тому ми можемо легко сказати:
var arr2 = arr.slice(); // make a copy of the original array
3) Також контактний метод - це для об'єднання двох масивів, але ми можемо просто вказати один з масивів, і це в основному зробить копію значень у новому контактному масиві:
var arr2 = arr.concat();
4) Також метод раціоналізації та розбору не рекомендується, але це може бути простим способом копіювання масиву та об'єктів:
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