Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 ActionScript:如何通过值而不是引用来分配数组?_Actionscript 3_Apache Flex_Actionscript - Fatal编程技术网

Actionscript 3 ActionScript:如何通过值而不是引用来分配数组?

Actionscript 3 ActionScript:如何通过值而不是引用来分配数组?,actionscript-3,apache-flex,actionscript,Actionscript 3,Apache Flex,Actionscript,我发现使用ActionScript的数组赋值方法学是不熟悉的。我知道它在做什么,但不知何故,我发现用这种方法管理许多阵列会令人困惑。如果数组赋值是通过值而不是引用进行的,那么有没有一种简单的方法来处理ActionScript数组?例如,如果我想将oneArray分配给twoArray,而不必在将来将这两个数组永远链接在一起,该如何做?这样行吗 var oneArray:Array = new Array("a", "b", "c"); var twoArray:Array(3); for (ii

我发现使用ActionScript的数组赋值方法学是不熟悉的。我知道它在做什么,但不知何故,我发现用这种方法管理许多阵列会令人困惑。如果数组赋值是通过值而不是引用进行的,那么有没有一种简单的方法来处理ActionScript数组?例如,如果我想将
oneArray
分配给
twoArray
,而不必在将来将这两个数组永远链接在一起,该如何做?这样行吗

var oneArray:Array = new Array("a", "b", "c");
var twoArray:Array(3);
for (ii=0; ii<3; ii++) { twoArray[ii] = oneArray[ii]; }

看起来您正在寻找方法。它返回一个新数组,该数组由原始数组中的一系列元素组成

var oneArray:Array = new Array("a", "b", "c");
var twoArray:Array = oneArray.slice();
twoArray[0] = "z";             
trace(oneArray);  

编辑:请注意,切片是浅拷贝,而不是深拷贝。如果您正在寻找深度副本,请遵循评论中指定的链接

如果我理解正确,您可以这样做:

var collection= new ArrayCollection(["a", "b", "c"]);
var clonedCollection = new ArrayCollection(ObjectUtil.copy(collection.source) as Array);

// a, b, c
trace(collection.toString());
// a, b, c
trace(clonedCollection .toString());

clonedCollection.removeItemAt(0);

// a, b, c
trace(collection.toString());
// b, c
trace(clonedCollection .toString());

您可以克隆阵列,以保证每个阵列元素中具有相同值的两个独立副本:

var oneArray:Array = new Array("a", "b", "c");
var twoArray:Array = oneArray.concat();
twoArray[0] = "z";
trace(oneArray); // Output: a,b,c

希望这就是您想要的。

您可以创建一个克隆函数,使用
ByteArray.writeObject
复制对象,然后使用
ByteArray.readObject
复制到一个新对象,如livedocs.adobe.com-


请注意,
writeObject
readObject
无法理解比
Object
Array
更复杂的对象

下面是一些关于深度克隆的信息,感谢您的回答,特别是浅层克隆和深度克隆之间的区别(我不知道)。刚才注意到taskinoor的回答,为了向我的方向追,呵呵,
concat
实际上是
slice
克隆数组速度的两倍。:)谢谢我做了一些研究,发现了一些支持你主张的链接。这里有一个:这只是一个肤浅的副本。对于阵列的深度副本,必须使用ByteArray在AS3中克隆阵列:
var oneArray:Array = new Array("a", "b", "c");
var twoArray:Array = oneArray.concat();
twoArray[0] = "z";
trace(oneArray); // Output: a,b,c