数组去重

780 阅读2分钟
var arr = ['a', 'b', 'c', 'a', 'b', 1, 2, 4, 6, 3, 3, 3];

1. 首先想到的是es6的Set;

new之后生成的是一个去重之后的对象;

然后使用数组的from(想要转换成数组的伪数组对象或可迭代对象)即可;

console.log(Array.from(new Set(arr)));

2.  使用slice截取(slice进行截取,所以是一个和其他的比,除了自身,二层循环从第二个开始,然后比的都是某个和后面的进行比较;如果相等,就可以减去,这样的话再次循环的下标数也需要减少)

for(var i=0;i
    for(var j=i+1;j
        if(arr[i] == arr[j]){
            arr.splice(j,1)
            i--;
        }
    }
}

3.  使用indexof(判断新的数组是否有这个变量)

var newarr3 = [];
arr.forEach((i) =>{
    if(newarr3.indexOf(i) == -1){
        newarr3.push(i)
    }
});
console.log(newarr3);

4.  利用sort(这个方法是用来排序的,先对数组进行排序,然后将新的数组先赋值第一个,之后遍历,判断是否当前这个和新数组中的前一个一样,然后进行添加)

arr.sort();
var newarr4 = [arr[0]];

for(var i=1;i<arr.length;i++){

    if(arr[i] !== newarr4[i-1]){

        newarr4.push(arr[i])

    }

}

console.log(newarr4)

5.  利用includes(是否包含这个元素)
var newarr5 = [];

for(var i=0;i<arr.length;i++){

    if(!newarr5.include(arr[i])){

        newarr5.push(arr[i]);

    }

}

6.  使用filter,indexOf(filter进行遍历,遍历数组,参数是:值,下标,数组,遍历之后,筛选的条件,判断某个值的下标是否有和当前的下标一样,要是一样说明是第一个,不一样就是重复了,也就不会返回数组中)

var newarr6 = arr.filter((i,index,arr) =>{

    return arr.indexOf(i,0) == index

})

7.  利用递归:sort,splice

方法一:(先把数组进行排序,然后从最后一个{传入的下标}开始向前 执行函数,如果传入的下标是第一个说明递归结束,否则,判断当前的和前一个是否相等,相等的话使用splice截取,否则递归调用前一个)
var newarr7 = arr;
var len = newarr7.length;
newarr7.sort();
function loop(index){
    if(index>1){
        if(newarr7[index] === newarr7[index-1]){
            newarr7.splice(index,1)
        }
        loop(index-1)
    }
}
loop(len-1);
console.log(newarr7)
方法二:(和上面一样不过这个是从偶开始,但是需要传入数组的长度,还是上面比较好一点)
var newarr7 = arr;
var len = newarr7.length;
newarr7.sort();
function loop(index, len) {
    if (index < newarr7.length - 1) {
        if (newarr7[index] === newarr7[index + 1]) {
            newarr7.splice(index, 1)
        }
        loop(index + 1, newarr7.length)
    }
}
loop(0, len);
console.log(newarr7)

8. 利用map(map对象,存储对象的,判断是否有这个值,有进行储存为true,否则储存为false)

var map = new Map();
var newarr8 = new Array();
for(var i=0;i
    if(map.has(arr[i])){
        map.set(arr[i],true)
    }else{
        map.set(arr[i],false);
        newarr8.push(arr[i])
    }
}
console.log(newarr8)

注: 

var map = new Map();

console.log(map)

var newarr8 = new Array();
for(var i=0;i
    if(map.has(arr[i])){
        map.set(arr[i],true)
    }else{
        map.set(arr[i],false);
        newarr8.push(arr[i])
    }
}

console.log(map)

console.log(newarr8)