Lodash 从数组中删除重复项

IT技术 javascript lodash
2021-01-18 21:30:40

这是我的数据:

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

我的真实数据集要大得多,键也更多,但概念应该是一样的。

6个回答

_.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 4.x 中, uniq() 只接受一个参数,它是一个数组。所以正如@WillLovett 所说,我们可以使用 uniqBy() 来解决这个问题。
2021-03-28 21:30:40
好家伙。为什么,哦,为什么,它uniq的发音是you-knee-queue而不是它应该的发音unique......
2021-03-29 21:30:40
lodash 4.0.1 文档已将其更改为 uniqBy。仅使用 uniq 无法让上述示例在我的一生中起作用。
2021-04-03 21:30:40

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

` let uniqObjects = _.uniqBy(docs, function (e) { return ex + ey; }); ` 对于具有简单对象的大数组,此方法会更快
2021-04-02 21:30:40
是的,但是您必须将一个属性作为第一个参数传递给 uniqBy,如果您希望它基于您尚不知道的几个属性是唯一的,这会很不方便
2021-04-04 21:30:40

或者干脆使用union,用于简单数组。

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

// [1,2,3,5]
我喜欢这个答案。它不是最易读的,但如果你从数学的角度考虑它,它实际上是有效的。_.union([1, 2, 2, 1, 3]) => [1, 2, 3]
2021-03-21 21:30:40

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

正在寻找var uniqueUsers = _.uniqWith(users, _.isEqual);//removed complete duplicates 你的答案值得更多的爱
2021-04-05 21:30:40

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

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