es 引用类型去重

250 阅读1分钟

前言

之前有位同事突然问我,怎么去重 ,特此记录...

基础类型

用set就可以满足了 , 这里不赘述

引用类型

数组

const arr = [[1 , 1] , [1 , 1] , [2 , 2]]
const m=  new Map(arr)
console.log(m)
VM6135:3 Map(2) {1 => 1, 2 => 2}
undefined
m.set(2 , 2)
Map(2) {1 => 1, 2 => 2}
m.set(3 , 3)
Map(3) {1 => 1, 2 => 2, 3 => 3}

当然,你用循环遍历去重也是可以的 , 如:

Array.filter() 加 indexOf

function distinct(a, b) {
    let arr = a.concat(b);
    return arr.filter((item, index)=> {
        return arr.indexOf(item) === index
    })
}

对象

const arr = [{a: 1} , {a: 1} , {a: 2}]

对象去重好像只得 遍历对比了。

还有一种方法 , 利用map

const arr = [{a: 1} , {a: 1} , {a: 2}]
const map = new Map()
arr.forEach((item, index)=>{
  !(map.has(JSON.stringify(item)))&& map.set(JSON.stringify(item) , index)
})