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.
_.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');
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
Or simply Use union, for simple array.
You can also use unionBy for 4.0.0 and later, as follows: let uniques = _.unionBy(data, 'id')
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);
来源:https://stackoverflow.com/questions/31740155/lodash-remove-duplicates-from-array