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键的对象? 有过滤器,映射和唯一的东西,但不太确定

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

454580 次浏览

_.unique不再适用于当前版本的Lodash,因为4.0.0版本有这个突破性的变化_.unique的功能被分解为_.uniq_.sortedUniq_.sortedUniqBy_.uniqBy

你可以像这样使用_.uniqBy:

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

...或者像这样:

_.uniqBy(data, 'id');

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


对于旧版本的Lodash (<4.0.0):

假设数据应该由每个对象的id属性唯一,并且数据存储在data变量中,你可以像这样使用_.unique()函数:

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

或者简单地像这样:

_.uniq(data, 'id');

你可以使用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 }]
< p >更多信息: https://lodash.com/docs/#uniqWith < / p >
你也可以在4.0.0及以后版本中使用unionBy,如下所示: Let uniques = _。unionBy(数据、“id”)< / p >

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

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


// [1,2,3,5]

简单地使用_.uniqBy ()。它创建一个无重复的数组版本。

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

_.uniqBy(data, 'id');

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

使用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

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

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

LODASH版本低于4中,你会发现这个函数的大部分都不是以同样的方式实现的。与版本4相反的_.uniq被修改了。我个人有一个项目,在过渡几个月(from 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文档,大多数情况下你会发现 可以找到迁移_.uniq从版本低于4可以执行

< p > _。“id”uniqBy(数据)_。“id”unionBy(数据)< / >强

两者都会带来相同的结果。我个人一直在猜测 任选其一。最后我选择了这个:_。“id”uniqBy(数据).