编辑:下面的每个答案都在起作用,感谢帮助我!
我目前正在学习在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在循环中仅拼接不到十次,这会导致上面的问题
有人对此有想法吗? 请帮帮我
答案 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)