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

При программировании на JavaScript иногда требуется создать копию массива. Но особенность заключается в том, что в JavaScript массив является объектом, поэтому при использовании оператора присваивания, новой копии создаваться не будет, а просто будет создана ссылка на существующий массив. Если после этого попробовать внести какие-нибудь изменения в любой из этих массивов, то изменения будут внесены сразу в оба. Так получается, потому что фактически это один и тот же объект. Например:
// Как хочется сделать, но не получится
var old_array = ['one', 'two', 'three'];
var new_array = old_array;
 
// Добавляем по одному элементу в исходный и "новый" массив
old_array.push('banana');
new_array.push('lemon');
 
// Получается вот что
// old_array = ['one', 'two', 'three', 'banana', 'lemon'];
// new_array = ['one', 'two', 'three', 'banana', 'lemon'];

Как видите, несмотря на то, что мы пытались добавить элементы в разные массивы (как нам казалось), они добавились в оба. Чтобы создавать не ссылку, а копию, можно воспользоваться хитрым трюком с методом slice. В этом случае будет создана именно копия массива.
// Корректный вариант решения
var old_array = ['one', 'two', 'three'];
var new_array = old_array.slice();
 
// Добавляем по одному элементу в исходный и новый массив
old_array.push('banana');
new_array.push('lemon');
 
// Теперь все правильно
// old_array = ['one', 'two', 'three', 'banana'];
// new_array = ['one', 'two', 'three', 'lemon'];

Надеюсь, что этот совет вам где-нибудь пригодится и поможет избежать хитрых ошибок, которые достаточно сложно отловить.
Теги:
скопировать, массив
Добавлено: 16 Сентября 2013 03:31:01 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...