JS关于数组去重常用的几种方法

327 阅读1分钟

1、for循环遍历

let arr = [1,2,3,4,5,6,1,3,5,2,4,6];

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

两层for循环比较arr[i]到arr[i+1~arr.length],相同则splice(i+1,1)去重

2、使用IndexOf方法去重

let arr = [1,2,3,4,5,6,1,3,5,2,4,6];
let arr2 = [];

for (let i = 0; i < arr.length; i++) {
     if (arr2.indexOf(arr[i]) === -1) {
         arr2.push(arr[i]);
     };
};

indexOf方法如果找不到就会返回-1

3、使用set方法去重

let arr = [1,2,3,4,5,6,1,3,5,2,4,6];

function reset(arr){
     return Array.from(new Set(arr));
}; 

let arr2 = reset(arr);

Set类似于数组,区别在于它所有的成员都是唯一的,不能有重复的值

4、使用sort方法排序去重

let arr = [1,2,3,4,5,6,1,3,5,2,4,6];
arr = arr.sort();
let arr2 = [];

for(let i = 0; i < arr.length; i++){
    if(arr[i] !== arr[i+1]){
        arr2.push(arr[i]);
    };
};

先使用sort方法排序好数组,然后比较数组的前后两项是否相同,如果相同就使用push方法添加到新的数组中

5、使用includes方法去重

let arr = [1,2,3,4,5,6,1,3,5,2,4,6];
let arr2 = [];

for(let i = 0; i < arr.length; i++){
    if(!arr2.includes(arr[i])){
        arr2.push(arr[i]);
    };
};

类似于indexOf方法,includes方法会检测数组是否存在传入的值,存在返回true

6、使用filter方法去重

let arr = [1,2,3,4,5,6,1,3,5,2,4,6];
let arr2 = arr.filter((item, i, self) => self.indexOf(item, 0) === i);

filter是es6的过滤数组的方法,使用filter结合indexOf方法能比较有效的去重