我从服务器那里得到响应
{
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
}
]
}
任何人都可以帮我解决这个问题。
答案 0 :(得分:1)
由于您需要跨两个数组的唯一性,因此必须先将它们组合在一起。
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');
与员工一样。
答案 1 :(得分:0)
有几种方法可以做到这一点。其中最简单的方法是使用lodash或underscore等库,并使用uniq
方法根据属性过滤掉重复的对象。
使用下划线作为示例来获取所有者对象的唯一列表:
_.uniq(owners, 'email')
或者这种功能也可以起作用:
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);
}