这是我的数据:

[
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello-how-are-you',
        id: "23"    
    },
    {
        url: 'www.example.com/i-like-cats',
        id: "24"    
    },
    {
        url: 'www.example.com/i-like-pie',
        id: "25"    
    }
]

使用Lodash,如何删除具有重复id键的对象? 有过滤器,地图和唯一的东西,但不太确定。

我的真实数据集要大得多,有更多的键,但概念应该是相同的。


当前回答

在低于4的LODASH版本中,您会发现大多数此函数都不是以相同的方式实现的。和版本4相反_。Uniq被修改了。我个人有一个项目处于几个月的过渡阶段(从V3 ->到V4)。

如果你在相同的情况下运行,你有很多函数需要更新。你可以分阶段进行,当你完成过渡后,你可以稍后来修复它。这是我用来避免平台停机的技巧:

/* LODASH Version 3 & 4 Compatibility Mode */
if ((_.VERSION).charAt(0) <= 3){ //Detect LODASH version 3 or 4.
    //V3 or lower
    _.uniq(data, true, 'id');
} else {
    //V4 or Higher
    _.uniqBy(data, 'id');
}

如果你看lodash文档大多数情况下 可以找到_的迁移。可以执行版本低于4的Uniq 具有两种功能: _。uniqBy(data, 'id')或 _。“id”unionBy(数据) 两者都会带来相同的结果。我个人一直在猜测 任选其一。最后我选了这个:_。“id”uniqBy(数据)。

其他回答

只需使用_.uniqBy()即可。它创建一个无重复的数组版本。

这是一个新的方法,从4.0.0版本可用。

_.uniqBy(data, 'id');

or

_.uniqBy(data, obj => obj.id);

或者简单地使用联合,用于简单数组。

_.union([1,2,3,3], [3,5])

// [1,2,3,5]

你也可以在4.0.0及以后版本中使用unionBy,如下所示: Let uniques = _。“id”unionBy(数据)

使用lodash版本4+,你可以通过特定的属性或整个对象删除重复的对象,就像这样:

var users = [
  {id:1,name:'ted'},
  {id:1,name:'ted'},
  {id:1,name:'bob'},
  {id:3,name:'sara'}
];
var uniqueUsersByID = _.uniqBy(users,'id'); //removed if had duplicate id
var uniqueUsers = _.uniqWith(users, _.isEqual);//removed complete duplicates

来源:https://www.codegrepper.com/?search_term=Lodash +删除+副本+ +数组

对于一个简单的数组,你有联合方法,但你也可以使用:

_.uniq([2, 1, 2]);