簡體   English   中英

Flex中ActionScript 3中for循環的基礎

[英]Basics in for loop in actionscript 3 in flex

早上好stackoverflow ...我遇到了問題....這是我的示例代碼

var i:Number = new Number();

trace("showarray length" + showArray.length);

for(i=0;i<showArray.length;i++){

    trace("equal daw" + showArray.getItemAt(i).id + "==" + num);

    if(showArray.getItemAt(i).id == num){
        showArray.removeItemAt(i);

    }
}
trace('alerts');

我的問題是...只要滿足,它就會停止循環,然后立即退出循環

假設showArray的長度為2並且num = 0,這是一個示例輸出

showarray length2

等於daw0 == 0

警報

請幫我

如果要在遍歷數組時刪除項目,請以相反的順序進行迭代。 這樣,元素刪除不會影響循環條件:

for (var i:int = showArray.length - 1; i >= 0; i--) {
    if (someCondition) {
        showArray.removeItemAt(i);
    }
}

另一個小好處是,它稍快一些,因為它沒有在每個步驟上調用showArray.length。

更好的方法可能是使用Array類的filter方法。

array = array.filter(function (e:*, i:int, a:Array):Boolean {
        return e.id != num;
    });

當你的if是滿足的id == num (這是0在第一回路所以發生),並且項被移除時,您的陣列長度減小到1,因此環將不會運行任何更多。

那是因為您要在遍歷項目時刪除它們。

array = [1, 2]
         ^         // pointer in first iteration

eliminate 1
array = [2]
         ^         // the pointer remains in the same location

//ups! out of the loop. all items were visited.

您可以在遍歷數組之前對其進行復制,然后對副本進行遍歷,或者標記索引以將其刪除,以后再將其刪除或向后迭代數組。

PS:對不起,我英語不好。

showArray.removeItemAt(i); ,加上i--;

由於您從數組中刪除了索引i處的項目,因此位於i + 1處的項目移至了i 通過減去一個,可以確保不跳過移動的項目。

alxx的答案也是一個很好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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