Lodash remove duplicates from array

半世苍凉 提交于 2019-12-28 01:43:14

问题


This is my data:

[
    {
        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"    
    }
]

With Lodash, how could I remove objects with duplicate id keys? Something with filter, map and unique, but not quite sure.

My real data set is much larger and has more keys, but the concept should be the same.


回答1:


_.unique no longer work for the current version as lodash 4.0.0 has this breaking change. The functionally was splitted into _.uniq, _.sortedUniq, _.sortedUniqBy, & _.uniqBy

You could use _.uniqBy either by

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

or

_.uniqBy(data, 'id');

Documentation: https://lodash.com/docs#uniqBy


For older versions of lodash( < 4.0.0 )

Assuming that the data should be unique by id and your data is stored in data variable, you can use unique() function like this:

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

Or simply

_.uniq(data, 'id');



回答2:


You could use lodash method _.uniqWith, it is available in the current version of lodash 4.17.2.

Example:

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 }]

More info: https://lodash.com/docs/#uniqWith




回答3:


Or simply Use union, for simple array.




回答4:


Simply use _.uniqBy(). It creates duplicate-free version of an array.

This is a new way and available from 4.0.0 version.

_.uniqBy(data, 'id');

or

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



回答5:


You can also use unionBy for 4.0.0 and later, as follows: let uniques = _.unionBy(data, 'id')




回答6:


With lodash version 4+, you would remove duplicate objects either by specific property or by the entire object like so:

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

Source:https://www.codegrepper.com/?search_term=Lodash+remove+duplicates+from+array



来源:https://stackoverflow.com/questions/31740155/lodash-remove-duplicates-from-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!