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

时间:2018-07-25 12:03:48

标签: arrays actionscript-3 flash actionscript 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);
}

我不太了解这个问题,但是结果如下:

1。并非Arr数组中的每个元素都已被删除 2.最大Arr的长度是在拼接前为10.BUT在循环中仅拼接不到十次,这会导致上面的问题

有人对此有想法吗? 请帮帮我

3 个答案:

答案 0 :(得分:5)

有更简单,更快捷的选项:

您只需将数组的长度设置为0。这将立即有效地删除其所有元素。

Arr.length = 0;

您可以创建Array类的新的空实例。那不会立即破坏原始对象,但是如果没有对其的引用,垃圾收集器最终将使用它,因此您无需考虑它。

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

答案 1 :(得分:3)

for(var i:int=0;i<Arr.length;i++)

这就是为什么它不能拼接所有内容的原因。每次运行此循环时,由于您将其剪接,所以Arr.length会减少1,因此一旦到达i == 5(第六个循环),条件就会得到满足,因为'i'(5)不再小于Arr。长度(数组中剩余5个),因此循环停止。

您的条件应该是进行拼接,只要数组包含0个以上的项即可。尝试以下方法:

for(var i:int=0;Arr.length>0;i++)

此外,拼接的工作方式如下。 Arr.splice(索引,要删除的数量)。在这种情况下,您可以在index0处进行拼接,以从底部将其一一删除。因此,正确的写法是:

Arr.splice(0,1)

如果您的目标只是清空数组,只需执行

Arr.length = 0;

另一方面,在推送新数组时,您无需在方括号中放置

Arr.push('index '+num);

效果也很好。

答案 2 :(得分:0)

  

您可以用这种方式写。它将删除整个元素

 function tock(e:TimerEvent):void{ 

     var i = Arr.length
    while (i--) {
        ...
        if (...) { 
            Arr.splice(i, 1);
        } 
    }    
}
  

否则,您只需重新初始化该数组(Arr)