当前位置:  开发笔记 > 编程语言 > 正文

从ActionScript数组中删除所有元素的最佳方法?

如何解决《从ActionScript数组中删除所有元素的最佳方法?》经验,为你挑选了4个好方法。

我正在使用Flex/ActionScript编写应用程序,并且有许多类存储数据的类成员变量.

我的问题是:清除Array对象的"最佳"方法是什么?

我注意到ArrayCollection类有一个函数removeAll()来执行此操作,但基本的Array类没有.我考虑过的一些可能性是:

遍历数组,在每个元素上调用pop或shift

将数组长度设置为0

将成员变量设置为"new Array()"或"[]"

Warren Young.. 15

我会说:

myArray = [ ];

这是明确的,简短的,并充分利用了VM的垃圾收集器.

您的第一个替代方案会运行大量解释代码以获得相同的结果.

我不知道第二个做你想要的; 如果确实如此,那就是hacky,不清楚.

第三种替代方案的"new Array()"变体只是罗嗦,没有优于数组文字的优势.如果您还编写JS并使用JSLint,那么您将因为不使用数组文字形式而大喊大叫.



1> Warren Young..:

我会说:

myArray = [ ];

这是明确的,简短的,并充分利用了VM的垃圾收集器.

您的第一个替代方案会运行大量解释代码以获得相同的结果.

我不知道第二个做你想要的; 如果确实如此,那就是hacky,不清楚.

第三种替代方案的"new Array()"变体只是罗嗦,没有优于数组文字的优势.如果您还编写JS并使用JSLint,那么您将因为不使用数组文字形式而大喊大叫.


设置长度= 0并不是hacky,正如as3 lang ref官方提到的那样:http://help.adobe.com/en_US/AS3LCR/Flash_10.0/Array.html#length.我个人也使用这种方法.我同意Christopher W. Allen-Poole的说法,你的方法实际上并没有清除阵列.

2> WORMSS..:

我不敢说,但是当他说设置myArray = []导致垃圾收集器拿起阵列时,Warren Young错了.

因为你有能力在自身内部添加一个引用,因此永远不会被收集和使用内存,特别是如果数组中有一些Sprite,因为它们也会让数组引用它们,它们也永远不会被收集.

Sly_cardinal和Richard Szalay是100%正确的.但理查德不需要长度参数.

要完全清除阵列并确保它被垃圾收集

myArray.splice(0);
myArray = null;



3> cwallenpoole..:

这取决于你的背景.虽然使用Young先生的答案通常是最正确的做法,但它并不总是有效,特别是如果你有两个指向同一个数组的变量:

var foo:Array
var bar:Array
foo = bar = [ 1, 2, 3 ];
bar = [];
trace( foo ); // 1,2,3

另一方面,如果你实际上手动清空了数组:

var foo:Array
var bar:Array
foo = bar = [ 1, 2, 3 ];
var l:int = bar.length; // get the length FIRST! 
                        // Otherwise bar.length will change
                        // while you iterate!

for( var i:int = 0; i < l; i++ )
{
    bar.shift();
}
trace( foo ); // does not trace anything


bar.splice(0); //不需要循环:)

4> Richard Szal..:

如果你可以修改数组引用,那么我会选择Warren的答案.如果需要修改现有实例,还可以使用Array.splice:

var arr : Array = [1, 2, 3, 4, 5];

arr.splice(0, arr.length);

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有