[英]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.