[英]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.並不是Arr數組中的每個元素都被刪除了2.最大Arr的長度在拼接之前是10個。但是在循環中,它的拼接只有不到10次,這導致了上面的問題
有人對此有所了解嗎? 請幫幫我
有更簡單和更快的選擇:
您可以將Array的長度設置為0.這將有效地立即刪除其所有元素。
Arr.length = 0;
您可以創建Array類的新空實例。 這不會立即銷毀原始對象,但如果沒有對它的引用,它最終將由垃圾收集器使用,因此您不需要考慮它。
// 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。長度(數組中剩下5個),因此循環停止。
只要數組的項數超過0,您的條件就應該是拼接。 試試這個:
for(var i:int=0;Arr.length>0;i++)
此外,拼接也是這樣的。 Arr.splice(INDEX,AMOUNT TO REMOVE)。 在這種情況下,您可以在index0處拼接以從底部逐個刪除它們。 因此,寫這個的正確方法是:
Arr.splice(0,1)
如果您的目標只是清空陣列,那就干脆做
Arr.length = 0;
另外,在推送新陣列時,您不需要放置那些方括號,
Arr.push('index '+num);
同樣有效。
你可以用這種方式寫作。 它將刪除整個元素
function tock(e:TimerEvent):void{
var i = Arr.length
while (i--) {
...
if (...) {
Arr.splice(i, 1);
}
}
}
否則你只需重新初始化該數組(Arr)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.