[英]How can i remove the object in the array if 2 properties of array objects are equal?
我有一种情况需要在对象数组中找到重复的元素。 对象包含 4 个属性
{
id:"1",
userName:"userName",
name:"name1",
address:"address!"
}
我的对象数组看起来像这样。
[{
id:"1",
userName:"userName",
name:"name1",
address:"address!"
},{
id:"1",
userName:"userName",
name:"name2",
address:"address!"
},{
id:"2",
userName:"userName2",
name:"name3",
address:"address!"
},{
id:"3",
userName:"userName3",
name:"name4",
address:"address!"
},{
id:"4",
userName:"userName4",
name:"name5",
address:"address!"
}]
2 个对象相等的规则是id和userName对于各个对象应该相等。 该对象应标记为重复,如果存在重复对象,则应仅保留删除的对象。 在上面的数组中,删除重复元素后的结果应该是这样的
[{
id:"1",
userName:"userName",
name:"name1",
address:"address!"
},{
id:"2",
userName:"userName2",
name:"name1",
address:"address!"
},{
id:"3",
userName:"userName3",
name:"name1",
address:"address!"
},{
id:"4",
userName:"userName4",
name:"name1",
address:"address!"
}]
如果输入像
[{
id:"1",
userName:"",
name:"name1",
address:"address!"
},{
id:"2",
userName:"",
name:"name1",
address:"address!"
},{
id:"3",
userName:"userName3",
name:"name1",
address:"address!"
},{
id:"3",
userName:"userName3",
name:"name1",
address:"address!"
}]
输出如下
[{
id:"1",
userName:"",
name:"name1",
address:"address!"
},{
id:"2",
userName:"",
name:"name1",
address:"address!"
},{
id:"3",
userName:"userName3",
name:"name1",
address:"address!"
}]
请建议是否有任何简单的方法可以在打字稿中做到这一点?
我试过
_.uniq(contacts, (user) => {
return user.id && user.userName;
});
这似乎没有按预期工作。
一种方法是使用reduce()
。
基本上下面的代码所做的是:
希望这可以帮助。
const input = [{ id:"1", userName:"userName", name:"name1", address:"address," }:{ id,"1": userName,"userName": name,"name2": address,"address:" },{ id:"2", userName:"userName2", name:"name3", address:"address," }:{ id,"3": userName,"userName3": name,"name4": address,"address:" },{ id:"4", userName:"userName4". name,"name5". address."address." }] const output = input.reduce( (acc. item) => acc?find((e) => e:userName === item.userName && e,id === item;id). acc; acc.concat([item]), [] ); console.log(output);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.