Создать копию массива в JavaScript можно с помощью метода slice().
// Скопируем массив someArray в массив newArray
var newArray = someArray.slice();
Почему нельзя просто присмоить одному массиву другой?
Дело в том, что в JavaScript массив является объектом, и поэтому мы не скопируем его, а просто создадим ссылку на существующий. В результате, при внесении изминений в любой из них, второй тоже будет изменен, потому что это один и тот же массив.
Пример:
var someArray = [1,2,3];
var newArray = someArray;
someArray.push(4);
// someArray = [1,2,3,4];
// newArray = [1,2,3,4]; !!!
Корректный пример:
var someArray = [1,2,3];
var newArray = someArray.slice();
someArray.push(4);
// someArray = [1,2,3,4];
// newArray = [1,2,3]; !!!
Понятненько. Спасибо за пример.
Тьфу, а я всё не понимал почему a = b с массивами не прокатывает. А тут специальный метод для этого есть оказывается! Спасибо!
Спасибо, товарищ автор, выручили! А с переменными внутри объекта так не происходит?
Если Вы хотите создать новую копию объекта, то обычним присваиванием тоже не получится. Нужно проходить по всем свойствам объекта (возможно даже рекурсивно, если это нужно), и копировать каждое свойство.
Иначе при присваивании скопируется только ссылка на тот же объект.
Спасибо))
можно ещё создать копию массива таким образом
var oldArr = [1, 2, 3]
var newArr = [];//Сюда копируем
for (var i = 0; i < oldArr.length; i++){
newArr[i] = oldArr[i]//Сам процесс
}
В итоге два независимых друг от друга массива,
newArr[0] = 0
if(newArr.length != oldArr.length)//Вернёт false
Осторожно с этим методом (slice)!
При многомерном массиве вы получите новый(!) массив, но внутри он будет содержать ссылки на вложенные массивы из старого массива.