如何(高效、清晰地)生成一组唯一的复合对象?能否避开JSON.stringifyJSON.parse?

问题描述 投票:1回答:1

最近,我不得不从一个从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是唯一的。

javascript arrays object unique
1个回答
1
投票

考虑到你有 _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)
© www.soinside.com 2019 - 2024. All rights reserved.