js去重数组

先随机生成两个数组

let arr1 = Array.from(new Array(10000), (x, index)=> index)
let arr2 = Array.from(new Array(50000), (x, index)=>index+index)

方法一: 使用for+idnexOf(或者includes),idnexOf方法返回指定元素在数组中第一次出现的位置,如果没有出现返回-1

let deDuplication=(a,b)=>{
    let arr = a.concat(b);
    let arrs=[]
    for(let i of arr){
      arrs.indexOf(i)=== -1 && arrs.push(i)
      //!arrs.includes(i) && arrs.push(i)
    }
    return arrs
}//耗时1120

方法二: 使用Array.filter() + indexOf

let deDuplication=(a,b)=>{
  let arr = a.concat(b);
  return arr.filter((item, index)=> {
        return arr.indexOf(item) === index
  })
}//耗时2206

方法三:双重for循环

let arr=[1,2,1,3,3,4]
let deDuplication=(arr)=>{
    let arr = a.concat(b);
    for (let i=0, len=arr.length; i<len; i++) {
        for (let j=i+1; j<len; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1);
                // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
                len--;
                j--;
            }
        }
    }
    return arr
}//耗时4671

方法四:使用 sort() 将数组进行排序,然后比较相邻元素是否相等

let deDuplication=(a,b)=>{
    let arr = a.concat(b)
    arr = arr.sort()
    let arrs = [arr[0]]
    for (let i=1, len=arr.length; i<len; i++) {
        arr[i] !== arr[i-1] && arrs.push(arr[i])
    }
    return arrs
}//耗时9

方法五: ES6 新增了 Set 这一数据结构,类似于数组,但 Set 的成员具有唯一性,基于这一特性,就非常适合用来做数组去重了

let deDuplication=(a,b)=>{
   return Array.from(new Set([...a, ...b]))
}//耗时20

方法六: 首先创建一个空对象,然后用 for 循环遍历,利用对象的属性不会重复这一特性,校验数组元素是否重复

let deDuplication=(a,b)=>{
  let arr = a.concat(b)
    let arrs = []
    let obj = {}
    for (let i of arr) {
        if (!obj[i]) {
            arrs.push(i)
            obj[i] = 1
        }
    }
    return arrs
}//耗时16

方法七: js数组对象去重,利用对象访问属性的方法,判断对象中是否存在key,同方法六。

let deDuplication=()=>{
    let arr = [
      {key: '01',value: '乐乐'},
      {key: '02',value: '博博'}, 
      {key: '03',value: '淘淘'},
      {key: '01',value: '乐乐'},
    ];
    var result = [];
    var obj = {};
    for(let i of arr){
     console.log(i.key)
       if(!obj[i.key]){
          result.push(i);
          obj[i.key] = true;
       }
    }
    return result
}

哈哈
9 声望1 粉丝