数组去重的多种方式

142 阅读1分钟

数组去重的方法,其实更多的体现的是在组数中我们常用的方法。

我们常用的数组的方法有比如set,indexOf,sort,includes, hasOwnProperty,filter,Map,reduce+includes

SET去重

set去重,是我们比较常用的方法

let arr = [1, 1, true, true, '2', '2', null, null, undefined, undefined, {}, {}, function(){}, function(){}]

function qc1(arr) {
  return Array.from(new Set(arr))
}
console.log(qc1(arr))

image.png 当前我们使用了多种类型的参数,这里我们会发现,在处理的过程中,空对象和函数是无法去重的。

indexOf去重

function qc2(arr) {
  let newArr = []
  for(let i = 0; i < arr.length; i++) {
    if(newArr.indexOf(arr[i])  < 0) {
      newArr.push(arr[i])
    }
  }
  return newArr
}
console.log(qc2(arr))

image.png

在这里我们发现,函数可以去重了,但是空对象还是不能去重

sort去重

利用sort做一下排序处理,然后从第二位开始对比

function qc3(arr) {
  arr = arr.sort()
  let newArr = [arr[0]]
  for(let i = 1; i < arr.length; i++) {
    if(arr[i] !== arr[i-1]) {
      newArr.push(arr[i])
    }
  }
  return newArr
}

image.png

includes

利用includes来判断新的数组里是否有重复的值

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

image.png

filter去重

function qc5(arr) {
  return arr.filter((item, index, arr) => arr.indexOf(item) === index);
}
console.log(qc5(arr))

image.png