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);
同样有效。
编辑:下面的每个答案都有效,感谢您帮助我!
我目前正在学习如何在 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);
同样有效。