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

AS3:removing every elements in an array at once using for loop

编辑:下面的每个答案都有效,感谢您帮助我!

我目前正在学习如何在 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.not Arr 数组中的每个元素都已被删除 2.the循环中spliced.BUT前Arr的最大长度为十,仅拼接不到十次,造成上述问题

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

you can write in this way. It will remove the entire elements

 function tock(e:TimerEvent):void{ 

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

otherwise you just reinitialize that array(Arr)

有更简单、更快的选择:

您可以将数组的长度设置为 0。这将有效地一次删除所有元素。

Arr.length = 0;

您可以创建数组的新空实例 class。那不会立即销毁原始对象,但是如果没有对它的引用,它最终会被垃圾收集器消耗掉,所以你不需要考虑它。

// You can omit () with the "new" operator if there are no mandatory arguments.
Arr = new Array;
for(var i:int=0;i<Arr.length;i++)

这就是它不拼接所有内容的原因。每次循环运行时, Arr.length 自从你拼接它后减 1,所以一旦它到达 i==5 (第六循环),条件就满足了,因为 'i'(5) 不再是小于 Arr.length(数组还剩 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);

同样有效。