簡體   English   中英

AS3:使用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.並不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM