疑问:Set去重对数组对象有用吗?答案:没用!

82 阅读1分钟

对于简单数组去重,现在比较常见的、简单的方法是使用new Set()来实现。(Set中的各个数据只会出现一次,是唯一的。)

const numbers = [2,3,3,4,2,3,3,9,1]
console.log([...new Set(numbers)])
// [2, 3, 4, 9, 1]

这么简单、方便的方法对去重对象数组会生效吗?如果生效,那就真的是泰酷辣!
实践出真知,结果是完全不行/(ㄒoㄒ)/~~,根本没有去重!
但是,强扭的瓜也会甜,如果非要用new Set()来实现对象数组的去重,可以将数组的每一项使用JSON.stringify()转换成字符串,再使用JSON.parse()将每一项转换回对象,就可以实现去重了。

const a = [{ name: 'Leo',age:5 }, { name: 'Lily',age:4 }, { name: 'Leo',age:5 }]
const b = [...new Set(a.map(r=>JSON.stringify(r)))].map(i=>JSON.parse(i))
console.log(b)
//[{ name: 'Leo',age:5 }, { name: 'Lily',age:4 }]