关于删除数组中相同元素的一个小技巧

如果说到删除数组中的相同元素,比如这里定义一个数组var arr=[1,1,2,2,3,3,3],我想要删除数组中的2,那么应该怎么做呢。大家都会想到使用for循环就可以了,of course . 

var arr=[1,1,1,2,2,2,3,3,3,3];
for (var i=0,len=arr.length;i<len;i++){
    if(arr[i]===2){
        arr.splice(i,1)}
}
我们预期的结果应该是arr=[1,1,1,3,3,3,3],但是实际的打印结果是[1,1,1,2,3,3,3,3],奇怪,怎么还有一个2没有删除呢,那是因为当我们删除第一个2(索引为3)后,后面的元素都会向前挪一步,这时,这个数组就变成了[1,1,1,2,2,3,3,3,3] ,进行下次循环时 i 就从索引4开始了,此时,就会有一个2被跳过去。

那么怎么才能实现我们想要的结果呢,我们可以从后向前循环,也就是把i的初始值为arr.length-1,每次循环i的值自减1,就是这样

var arr=[1,1,1,2,2,2,3,3,3,3];
for (var i=arr.length-1;i>=0;i--){
    if(arr[i]===2){
        arr.splice(i,1)}
}
此时,arr=[1,1,1,3,3,3,3],就是我们想要的结果了

猜你喜欢

转载自blog.csdn.net/lh_guojw/article/details/70306570