Копирование массивов
( 1 ) С использованием метода slice()
var arr1 = [1, 2, 3]
var arr2 = arr1.slice();
console.log(arr1) // [1, 2, 3]
console.log(arr2) // [1, 2, 3]
console.log(arr1 == arr2) // false
Но при использование такого подхода возникает проблема "глубокого копирования". Например, если копируемый массив будет иметь ссылку на другой массив.
var arr1 = [1, 2, 3];
var arr2 = [arr1, 4, 5, 6];
var arr3 = arr2.slice();
console.log(arr2) // [[1, 2, 3], 4, 5, 6]
console.log(arr3) // [[1, 2, 3], 4, 5, 6]
arr1.push(10); // Добавляем значение
console.log(arr2) // [[1, 2, 3, 10], 4, 5, 6]
console.log(arr3) // [[1, 2, 3, 10], 4, 5, 6] - изменения затронули и копию!
( 2 ) JSON
Чтобы избежать ситуации выше, моэно воспользоваться объектом JSON и его методами .parse()
и .stringify()
var arr1 = [1, 2, 3];
var arr2 = [arr1, 4, 5, 6];
var arr3 = JSON.parse(JSON.stringify(arr2))
console.log(arr2) // [[1, 2, 3], 4, 5, 6]
console.log(arr3) // [[1, 2, 3], 4, 5, 6]
arr1.push(10); // Добавляем значение
console.log(arr2) // [[1, 2, 3, 10], 4, 5, 6]
console.log(arr3) // [[1, 2, 3], 4, 5, 6] - сама копия НЕ ИЗМЕНИЛАСЬ