举例:已知数组:arr1=[0,1,2,3,4],arr2=[0,1,1,2,3,4],要求:将数组中的1删除
针对arr1:
for(var i=0;i<arr1.length;i++){
if(arr1[i]==1){
arr1.splice(i,1);
}
}
console.log(arr1);
输出结果:
针对arr2:
for(var i=0;i<arr2.length;i++){
if(arr2[i]==1){
arr2.splice(i,1);
}
}
console.log(arr2);
输出结果:
问题出现了:当数组中出现重复需要删除的对象时,并没有完全删除。
那么原因是什么呢?
当满足条件的时候,执行splice方法,数组删除符合条件的对象,导致数组发生了改变,那么i也会发生相应的改变,比如:对于arr2,在执行删除之前,当i=1时,arr2[1]=1,删除后,数组变为[0,1,2,3,4],那么下一个循环i==2,则arr2[2]=2。
该怎么解决?
就是满足条件执行splice的时候,i必须也得执行一次i自减(i--),保持与数组长度循环的节奏。
for(var i=0;i<arr2.length;i++){
if(arr2[i]==1){
arr2.splice(i,1);
i--;
}
}
console.log(arr2);
输出结果: