最近,我不得不从一个从MongoDB检索的对象数组中删除重复的对象。我是这样做的。
let users = [{_id:"abc",name:"Bob"},{_id:"xyz",name:"Al"},{_id:"abc",name:"Bob"}];
let uniqueUsers = [...new Set(users.map(x => JSON.stringify(x)))].map(y => JSON.parse(y));
console.log(users)
console.log(uniqueUsers) //expected output : [{_id:"abc",name:"Bob"},{_id:"xyz",name:"Al"}]
但我想知道,这是个有效的方法吗?能否用更优雅的方式来完成?我想,使用ES6的一些新特性会是一个好方法。您觉得呢?
编辑:由于我的对象是MongoDB文档,它们的ID是唯一的。
考虑到你有 _id
在每个对象上,可能更容易得到一个独特的集合,并将它们映射到
[...new Set(users.map(user => user._id))].map( id => users.find(user => user._id === id) )
或者你可以 reduce
它基于 _id
const reducedUsers = users.reduce( (acc, user) => {
acc[user._id] = user
return acc
}, {} )
Object.values(reducedUsers)