如何使用javascript在对象数组中只保留唯一的对象
我从服务器得到的响应如下如何使用javascript在对象数组中只保留唯一的对象,javascript,node.js,underscore.js,lodash,Javascript,Node.js,Underscore.js,Lodash,我从服务器得到的响应如下 { owners:[ { _id:"33333" email:test1@gmail.com } { _id:"1111" email:test2@gmail.com }] employee:[ { _id:"44342" email:test1@gmail.com } { _id:"35345" email:test3@gmail.
{
owners:[
{
_id:"33333"
email:test1@gmail.com
}
{
_id:"1111"
email:test2@gmail.com
}]
employee:[
{
_id:"44342"
email:test1@gmail.com
}
{
_id:"35345"
email:test3@gmail.com
}
{
_id:"3556"
email:test4@gmail.com
}
]
users:[
{
_id:"56744"
email:test5@gmail.com
}
{
_id:"8908"
email:test4@gmail.com
}]
}
我希望在所有对象数组中保留仅具有唯一电子邮件id的对象。结果如下:
{
owners:[
{
_id:"33333"
email:test1@gmail.com
}
{
_id:"1111"
email:test2@gmail.com
}]
employee:[
{
_id:"35345"
email:test3@gmail.com
}
{
_id:"35345"
email:test4@gmail.com
}
]
users:[
{
_id:"56744"
email:test5@gmail.com
}
]
}
有谁能帮我一下吗。有几种方法可以做到这一点。最简单的方法之一是使用类似或的库,并使用
uniq
方法根据属性过滤出重复的对象
以下划线为例获取所有者对象的唯一列表:
\uuq.uniq(所有者,“电子邮件”)
或者这种功能也可以工作:
function uniqeValues(objects, property) {
let unique_values = {};
objects.forEach(object=> {
if (!unique_values.hasOwnProperty(object[property])) {
unique_values[object[property]] = object;
}
});
return Object.values(unique_values);
}
由于您需要两个数组之间的唯一性,因此必须首先将它们组合起来
let combined = result.owners.map(o => {o.type = 'owner'; return o;})
.concat(result.users.map(u => {u.type = 'user'; return u;});
combined = _.uniqBy(combined, 'email');
result.owners = _.filter(combined, {type: 'owner');
result.users = _.filter(combined, {type: 'user');
员工也是如此。您希望保留哪些重复记录,第一个?因为_id是唯一的,inof将永远丢失。