Skip to content

Latest commit

 

History

History
56 lines (45 loc) · 1.24 KB

数组去重.md

File metadata and controls

56 lines (45 loc) · 1.24 KB

filter

利用 filter 的第三个参数 --- 整个数组, 查找数组内当前元素的索引

  • 如果索引匹配, 就是第一次出现
  • 如果索引不匹配, 是重复的, 就过滤掉
const arr1 = [1, 2, 2, 4, 5, 3, 2, 4, 3]
const arr2 = arr.filter((item, index, self) => index === self.indexOf(item))
//  [1, 2, 4, 5, 3]

对象

利用对象属性查找

  • 不存在, 就创建一个键值对
  • 存在, 则跳过

最后调用 Object.keys 方法取出所有的键名, 展开

const arr1 = [1, 2, 2, 4, 5, 3, 2, 4, 3]

const obj = {}
for (let i = 0; i < arr1.length; i++) {
  if(obj.hasOwnProperty(arr1[i])){
    continue
  }
  obj[arr1[i]]=i
}

const arr2 = [...Object.keys(obj)]

Set

利用集合天生的互异性去重 传递一个数组, 经过 Set 集合转化后, 展开

const arr1 = [1, 2, 2, 4, 5, 3, 2, 4, 3]

const arr2 = [...new Set([...arr1])]

顺序 比较

先将数组从小到大排列, 通过比较大小决定是否要插入到 ret 数组中

const arr1 = [1, 2, 2, 4, 5, 3, 2, 4, 3]

function noRepeat(arr) {
  arr.sort((a, b) => a - b)
  const ret = [arr[0]]
  for (let i = 1; i < arr.length; i++) {
    ret.slice(-1)[0] !== arr[i] && ret.push(arr[i])
  }
  return ret
}