AS3:使用for循环一次删除数组中的每个元素

Yud*_*his 4 arrays flash actionscript actionscript-3 flash-cs5

编辑:以下每个答案都在工作,感谢您的帮助!

我目前正在学习如何在as3中拼接数组.所以这是我的代码:

//import classes
import flash.utils.Timer;
import flash.events.*;

//variables
var Arr:Array=new Array();
var num:Number=0;
//set a timer and set timer limit of 10 times
var timer:Timer=new Timer(1000,10);

//add a listener to our timer object
timer.addEventListener(TimerEvent.TIMER, tick);
timer.addEventListener(TimerEvent.TIMER_COMPLETE,tock);

//tick function
function tick(e:TimerEvent):void{
    //i add an element each time the timer 'ticks'
    Arr.push(['index'+num]);
    num++;
}
//tock function
function tock(e:TimerEvent):void{
trace('array elements :'+Arr);//traces Arr elemnts
for(var i:int=0;i<Arr.length;i++){
    Arr.splice(i,1);// i've tried Arr.splice(0,1), but neither working
    trace('elemnts left : '+Arr);
}
Run Code Online (Sandbox Code Playgroud)

我真的不明白这个问题,但结果如下:

1.并不是Arr数组中的每个元素都被删除了2.最大Arr的长度在拼接前是十.但是在循环中,它的拼接只有不到十次,这导致了上面的问题

有人对此有所了解吗?请帮帮我

Org*_*nis 5

有更简单和更快的选择:

您可以将Array的长度设置为0.这将有效地立即删除其所有元素.

Arr.length = 0;
Run Code Online (Sandbox Code Playgroud)

您可以创建Array类的新空实例.这不会立即销毁原始对象,但如果没有对它的引用,它最终将由垃圾收集器使用,因此您不需要考虑它.

// You can omit () with the "new" operator if there are no mandatory arguments.
Arr = new Array;
Run Code Online (Sandbox Code Playgroud)

  • @FlorianSalihovic不,不.**[**]**记录显然更短.然后,我只测试了100万和1000万个循环,坦率地说,经过的时间没有太大的差别,竞争以两个方向+ -50ms结束.在某些时候实际上**WAS**差异并非不可能,但最近的SDK /播放器版本并非如此. (2认同)