JavaScript: Как скопировать массив

2011-02-04

Создать копию массива в 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]; !!!



7 комментариев на «JavaScript: Как скопировать массив»

  1. Александр:

    Понятненько. Спасибо за пример.

  2. Skolzyashiy:

    Тьфу, а я всё не понимал почему a = b с массивами не прокатывает. А тут специальный метод для этого есть оказывается! Спасибо!

  3. NickKolok:

    Спасибо, товарищ автор, выручили! А с переменными внутри объекта так не происходит?

  4. admin:

    Если Вы хотите создать новую копию объекта, то обычним присваиванием тоже не получится. Нужно проходить по всем свойствам объекта (возможно даже рекурсивно, если это нужно), и копировать каждое свойство.
    Иначе при присваивании скопируется только ссылка на тот же объект.

  5. Дмитрий:

    Спасибо))

  6. Asylum:

    можно ещё создать копию массива таким образом
    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

  7. Антон:

    Осторожно с этим методом (slice)!
    При многомерном массиве вы получите новый(!) массив, но внутри он будет содержать ссылки на вложенные массивы из старого массива.

Добавить комментарий