繁体   English   中英

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

[英]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 个对象相等的规则是iduserName对于各个对象应该相等。 该对象应标记为重复,如果存在重复对象,则应仅保留删除的对象。 在上面的数组中,删除重复元素后的结果应该是这样的

[{
    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()

基本上下面的代码所做的是:

  • 以一个空的输出数组开始
  • 对于输入测试的每个元素是否已经在输出中(基于 userName 和 id)
  • 如果不是,则添加它,如果是,则什么都不做。

希望这可以帮助。

 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