Clonagem de matrizes

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

A classe Array não tem nenhum método incorporado para fazer cópias de matrizes. Você pode criar uma cópia superficial de uma matriz chamando os métodos concat() ou slice() sem nenhum argumento. Em uma cópia superficial, se a matriz original tiver elementos que são objetos, somente as referências aos objetos serão copiadas, não os objetos propriamente ditos. A cópia aponta para os mesmos objetos da original. Qualquer alteração feita nos objetos é refletida nas duas matrizes.

Em uma cópia profunda , todos os objetos encontrados na matriz original também são copiados para que a nova matriz não aponte para os mesmos objetos da matriz original. A cópia profunda requer mais de uma linha de código, que normalmente chama uma função de criação. Essa função pode ser criada como uma função do utilitário global ou como um método de uma subclasse de Array.

O exemplo a seguir define uma função chamada clone() que faz a cópia profunda. O algoritmo é emprestado de uma técnica comum de programação Java. A função cria uma cópia profunda serializando a matriz em uma ocorrência da classe ByteArray e lendo a matriz de volta em uma nova matriz. Essa função aceita um objeto para que possa ser usada com matrizes indexadas e associativas, como mostra o código a seguir:

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