Lodash 从数组中删除重复项

2022-08-29 23:49:30

这是我的数据:

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

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


答案 1

_.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):

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

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

或者干脆这样:

_.uniq(data, 'id');

答案 2

您可以使用 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