【问题标题】:Remove repeated occurance from an array [duplicate]从数组中删除重复出现[重复]
【发布时间】:2016-04-01 05:46:30
【问题描述】:

我需要根据某些条件检查从数组中删除重复的对象 如果此数组中有任何具有相同“连接器”、“地址”、“类型”值的对象,我需要删除该对象。

array =  [{
        connector : 'smtp',
        name : 'john',
        address : 'john@gmail.com',
        type : 'cc'
    }, {
        connector : 'smtp',
        name : 'john',
        address : 'john@gmail.com',
        type : 'cc'
    }, {
        connector : 'gtp',
        name : 'mark',
        address : 'mark@gmail.com',
        type : 'cc'
    }, {
        connector : 'ftp',
        name : 'wiki',
        address : 'wiki@gmail.com',
        type : 'bcc'
    },
    {
        connector : 'smtp',
        name : 'wiki',
        address : 'wiki@gmail.com',
        type : 'cc'
    }
 ]

我需要像下面这样的输出

output = [{
        connector : 'smtp',
        name : 'john',
        address : 'john@gmail.com',
        type : 'cc'
    },{
        connector : 'gtp',
        name : 'mark',
        address : 'mark@gmail.com',
        type : 'cc'
    }, {
        connector : 'ftp',
        name : 'wiki',
        address : 'wiki@gmail.com',
        type : 'bcc'
    },
    {
        connector : 'smtp',
        name : 'wiki',
        address : 'wiki@gmail.com',
        type : 'cc'
    }
 ]

对不起,我尝试了一些重复的 foreach 循环,但最终没有成功。你能帮我找到任何有效的方法来做同样的事情吗?

【问题讨论】:

  • 添加你尝试过的代码
  • 尝试查看 underscore.js 库。他们有重复的过滤功能。

标签: javascript underscore.js lodash


【解决方案1】:

可以借助下划线uniq来完成。

array =  [{
        connector : 'smtp',
        name : 'john',
        address : 'john@gmail.com',
        type : 'cc'
    }, {
        connector : 'smtp',
        name : 'john',
        address : 'john@gmail.com',
        type : 'cc'
    }, {
        connector : 'gtp',
        name : 'mark',
        address : 'mark@gmail.com',
        type : 'cc'
    }, {
        connector : 'ftp',
        name : 'wiki',
        address : 'wiki@gmail.com',
        type : 'bcc'
    },
    {
        connector : 'smtp',
        name : 'wiki',
        address : 'wiki@gmail.com',
        type : 'cc'
    }
 ]
 //generating a string of keys you wish to compare which forms the criteria for uniqueness
 add = _.uniq(array, function(a){ return a.connector + "-" + a.address + "-" + a.type;})

 console.log(add)

工作代码here

【讨论】:

  • uniqBy 也可以使用。 _.uniqBy(array, obj => obj.connector + '-' + obj.address + '-' + obj.type);
  • JSON.stringify 是改进的解决方案,我希望
  • @Tushar 你确定 uniqBy 它不在文档中吗underscorejs.org
  • @Cyril 它在 Lodash
  • 使用 this SO answer 中解释的 Lodash 的 uniqWith 来避免比较字符串。
猜你喜欢
  • 2011-06-29
  • 2013-08-03
  • 2021-07-29
  • 2021-04-02
  • 2013-05-20
相关资源
最近更新 更多