用for each删除数组元素的问题

且看代码:

var arr:Array = [1,1,1,1,3,5,1,4,7,1,1];
var myArr:Array = [];
var j:int;
var i:Object;
var tmpO:Object;
var TV:Function = function(arr:Array):void{
    var txt:String="";
    if(arr){
        for(var i:int=0;i<arr.length;i++){
            txt+=(arr[i].value+",");
        }
        trace(txt);
    }
};
for(j=0;j<arr.length;j++){
    tmpO = new Object();
    tmpO.value = arr[j];
    myArr.push(tmpO);
}
TV(myArr);
for each(i in myArr){
    if(i.value==1){
        myArr.splice(myArr.indexOf(i),1);
    }
}
TV(myArr);

其实最重要的莫属这段了,出问题的也是这段:

for each(i in myArr){
    if(i.value==1){
        myArr.splice(myArr.indexOf(i),1);
    }
}

只要两个连着的1,较后面的那个1就删不掉,这问题遇见很多年了。今天为证明给别人看,也为了巩固自己的记忆。记录于此。解决如下:

//用这段替换掉上面的for each
for(j=0;j<myArr.length;j++){
    i = myArr[j];
    if(i.value==1){
        myArr.splice(myArr.indexOf(i),1);//其实这里可以更简单,懒得写了
        j--;
    }
}

结束。

原文地址:https://www.cnblogs.com/ShepherdIsland/p/2665433.html