《JS中数组去重的各种方法》

100 阅读2分钟

首先:

!Array.isArray(arr)  判断是否为数组

1.Set方法

let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];

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

unique(arr1);

该方法处理多个数组的去重是比较方便,代码如下:

let array1 = [1, 2, 3, 4];
let array2 = [2, 3, 4, 5, 6];
let uniqueArray = new Set([... array1, ... array2]);
console.log('uniqueArray:', uniqueArray);

2.Map方法:

let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr){
    let map = new Map();
    let array = new Array();  // 数组用于返回结果
    for (let i = 0; i < arr.length; i++) {
        if(map.has(arr[i])) { // 判断 map 中是否已有该 key 值
            map.set(arr[i], true);  // 后面的true代表该 key 值在原始数组中重复了,false反之
        } else {  // 如果 map 中没有该 key 值,添加
            map.set(arr[i], false);  
            array.push(arr[i]);
        }
    } 
    return array;
}

unique(arr1);

Map对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

Map 的实例属性和操作方法

  1. size:返回成员总数
  2. set(key, value):添加新的键值
  3. get(key):读取键对应的值
  4. has(key):是否有某个键
  5. delete(key):删除某个键
  6. clear():清空

Map实例的遍历方法

  1. keys():返回键名的遍历器。
  2. values():返回键值的遍历器。
  3. entries():返回键值对的遍历器。
  4. forEach():遍历 Map 的所有成员。

3.indexOf方法

let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr) {
  var arr2 = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr2.indexOf(arr[i]) === -1) {
      arr2.push(arr[i]);     
    }
  }
  return arr2;
}
unique(arr1)

简化:

let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr) {
  var arr2 = [];
  for (let i = 0; i < arr.length; i++) {
    arr2.indexOf(arr[i]) === -1 ? arr2.push(arr[i]) : [];
  }
  return arr2;
}
unique(arr1);

4.利用双for循环,然后splice去重(ES5)

let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr){            
        for(var i=0; i<arr.length; i++){
            for(var j=i+1; j<arr.length; j++){
                if(arr[i]==arr[j]){         //第一个等同于第二个,splice方法删除第二个
                    arr.splice(j,1);
                    j--;
                }
            }
        }
return arr;
}
unique(arr1)

5.sort()方法

let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr) {
arr = arr.sort()
    var arrry= [arr[0]];
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] !== arr[i-1]) {
            arrry.push(arr[i]);
        }
    }
    return arrry;
}
unique(arr1)