Lodash从数组中删除重复项

时间:2015-07-31 07:10:58

标签: javascript lodash

这是我的数据:

[
    {
        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键的对象? 有过滤器,地图和独特的东西,但不太确定。

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

7 个答案:

答案 0 :(得分:322)

_.uniq不再适用于当前版本,因为lodash 4.0.0具有this breaking change。所以使用

_.uniqBy(data, function (e) {
  return e.id;
});

_.uniqBy(data, 'id');

文档:https://lodash.com/docs#uniqBy

对于旧版本的lodash(< 4.0.0)

假设id数据应该是唯一的,并且您的数据存储在data变量中,您可以使用uniq()这样的函数:

_.uniq(data, function (e) {
  return e.id;
});

或者只是

_.uniq(data, 'id');

答案 1 :(得分:44)

您可以使用lodash方法_.uniqWith,它在当前版本的lodash 4.17.2中可用。

示例:

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];

_.uniqWith(objects, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]

更多信息: https://lodash.com/docs/#uniqWith

答案 2 :(得分:4)

对于简单数组,您可以采用并集方法,但也可以使用:

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

答案 3 :(得分:1)

您也可以使用unionBy for 4.0.0及更高版本,如下所示: 让uniques = _.unionBy(data,'id')

答案 4 :(得分:1)

或者对于简单数组,只需使用union

答案 5 :(得分:0)

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

这是一种新方法,从4.0.0版本开始可用。

_.uniqBy(data, 'id');

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

答案 6 :(得分:0)

在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+remove+duplicates+from+array