Actionscript 3 ActionScript:如何通过值而不是引用来分配数组?
我发现使用ActionScript的数组赋值方法学是不熟悉的。我知道它在做什么,但不知何故,我发现用这种方法管理许多阵列会令人困惑。如果数组赋值是通过值而不是引用进行的,那么有没有一种简单的方法来处理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
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