var arr = [1,1,1,1,2,2,2,2]; for(var i=0; i<arr.length; i++){ if(arr[i] === 1){ arr.splice(i,1); } }最后得到的结果却是:[1, 1, 2, 2, 2, 2],1并没有删除干净?!
其实原因很简单,当删除了第一个1,这个时候数组的第0个仍然是1,可是i已经++变成了1,从数组第二个开始删除了,以此类推,所以,总是隔一个删除,这时只要将i++再变成0,从数组第一个重新开始遍历,也就是i变成-1即可,所以代码修改如下:
var arr = [1,1,1,1,2,2,2,2]; for(var i=0; i<arr.length; i++){ if(arr[i] === 1){ arr.splice(i,1); i=-1; } }最后得到的结果是:[2, 2, 2, 2]