Клонирование массивов

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

У класса Array нет встроенного метода для создания копий массивов. Можно создать поверхностную копию массива путем вызова метода concat() или slice() без аргументов. Если элементами исходного массива являются объекты, то поверхностная копия будет содержать только ссылки на объекты, а не сами объекты. Копия указывает на те же объекты, что и оригинал. Любые изменения объектов отражаются в обоих массивах.

В глубокой копии все объекты, обнаруженные в исходном массиве, копируются, так что новый массив не указывает на те же объекты, что исходный. При глубоком копировании требуется более одной строки кода, для чего обычно нужно создать функцию. Можно создать глобальную вспомогательную функцию или метод подкласса Array.

В примере ниже определяется функция clone() , которая выполняет глубокое копирование. Алгоритм заимствован у широко используемой техники языка Java. Функция создает глубокую копию, упорядочивая массив и превращая его в экземпляр класса ByteArray, а затем заново считывая его в новый массив. Эта функция принимает объект, чтобы его можно было использовать как с индексными массивами, так и с ассоциативными, как показано в коде ниже:

import flash.utils.ByteArray; 
 
function clone(source:Object):* 
{ 
    var myBA:ByteArray = new ByteArray(); 
    myBA.writeObject(source); 
    myBA.position = 0; 
    return(myBA.readObject()); 
}