如何使用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将永远丢失。