[英]How can i remove the object in the array if 2 properties of array objects are equal?
I have a situation where i need to find the duplicate element in array of object.我有一种情况需要在对象数组中找到重复的元素。 Object contains 4 properties
对象包含 4 个属性
{
id:"1",
userName:"userName",
name:"name1",
address:"address!"
}
My array of object looks like this.我的对象数组看起来像这样。
[{
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!"
}]
Rule for 2 object to be equal is id and userName should be equal for respective objects. 2 个对象相等的规则是id和userName对于各个对象应该相等。 That object should be marked as duplicate and removed only object should remain if there are duplicate object.
该对象应标记为重复,如果存在重复对象,则应仅保留删除的对象。 In above array after removing the duplicate element result should be like this
在上面的数组中,删除重复元素后的结果应该是这样的
[{
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!"
}]
if the input is like如果输入像
[{
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!"
}]
out put is like below输出如下
[{
id:"1",
userName:"",
name:"name1",
address:"address!"
},{
id:"2",
userName:"",
name:"name1",
address:"address!"
},{
id:"3",
userName:"userName3",
name:"name1",
address:"address!"
}]
Please suggest is there any easy method which can do this in typescript?请建议是否有任何简单的方法可以在打字稿中做到这一点?
I tried我试过
_.uniq(contacts, (user) => {
return user.id && user.userName;
});
This seems to be not working as expected.这似乎没有按预期工作。
One way to do it would be by using reduce()
.一种方法是使用
reduce()
。
Basically what the code below does is:基本上下面的代码所做的是:
Hope this helps.希望这可以帮助。
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.