且看代码:
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--; } }
结束。