简体   繁体   English

如果数组对象的 2 个属性相等,我如何删除数组中的对象?

[英]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 个对象相等的规则是iduserName对于各个对象应该相等。 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:基本上下面的代码所做的是:

  • starts with an empty output array以一个空的输出数组开始
  • for each element of the input test if it's already in the output (based on userName and id)对于输入测试的每个元素是否已经在输出中(基于 userName 和 id)
  • if it isn't, then add it, if it is, then do nothing.如果不是,则添加它,如果是,则什么都不做。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM