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, как я могу удалить объекты с дубликатными ключами?
Что-то с фильтром, картой и уникальным, но не совсем уверенным.
Мой реальный набор данных намного больше и имеет больше ключей, но концепция должна быть одинаковой.
Ответы
Ответ 1
_.uniq
больше не работает для текущей версии, так как lodash 4.0.0 имеет это нарушение. Поэтому используйте
_.uniqBy(data, function (e) {
return e.id;
});
или
_.uniqBy(data, 'id');
Документация: https://lodash.com/docs#uniqBy
Для более старых версий lodash (< 4.0.0)
Предполагая, что данные должны быть уникальными id
, а ваши данные хранятся в переменной data
, вы можете использовать uniq(), как это:
_.uniq(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
Ответ 3
Вы также можете использовать unionBy для 4.0.0 и более поздних версий следующим образом: let uniques = _.unionBy(data, 'id')
Ответ 4
Или просто используйте объединение для простого массива.
Ответ 5
Мои данные таковы.
Мне нужны только имена команд из этих данных, которые нельзя дублировать.
{
"name": "English Premier League 2015/16",
"rounds": [
{
"name": "Play-Off um 1 Premierleague-Platz:",
"matches": [
{
"date": "2015-08-08",
"team1": {
"key": "manutd",
"name": "Manchester United",
"code": "MUN"
},
"team2": {
"key": "tottenham",
"name": "Tottenham Hotspur",
"code": "TOT"
},
"score1": 1,
"score2": 0
},
{
"date": "2015-08-08",
"team1": {
"key": "bournemouth",
"name": "Bournemouth",
"code": "BOU"
},
"team2": {
"key": "astonvilla",
"name": "Aston Villa",
"code": "AVL"
},
"score1": 0,
"score2": 1
},
{
"date": "2015-08-08",
"team1": {
"key": "everton",
"name": "Everton",
"code": "EVE"
},
"team2": {
"key": "watford",
"name": "Watford",
"code": "WAT"
},
"score1": 2,
"score2": 2
},
{
"date": "2015-08-08",
"team1": {
"key": "leicester",
"name": "Leicester City",
"code": "LEI"
},
"team2": {
"key": "sunderland",
"name": "Sunderland",
"code": "SUN"
},
"score1": 4,
"score2": 2
},
{
"date": "2015-08-08",
"team1": {
"key": "norwich",
"name": "Norwich",
"code": "NOR"
},
"team2": {
"key": "crystalpalace",
"name": "Crystal Palace",
"code": "CRY"
},
"score1": 1,
"score2": 3
},
{
"date": "2015-08-08",
"team1": {
"key": "chelsea",
"name": "Chelsea",
"code": "CHE"
},
"team2": {
"key": "swansea",
"name": "Swansea",
"code": "SWA"
},
"score1": 2,
"score2": 2
},
{
"date": "2015-08-09",
"team1": {
"key": "arsenal",
"name": "Arsenal",
"code": "ARS"
},
"team2": {
"key": "westham",
"name": "West Ham United",
"code": "WHU"
},
"score1": 0,
"score2": 2
},
{
"date": "2015-08-09",
"team1": {
"key": "newcastle",
"name": "Newcastle United",
"code": "NEW"
},
"team2": {
"key": "southampton",
"name": "Southampton",
"code": "SOU"
},
"score1": 2,
"score2": 2
},
{
"date": "2015-08-09",
"team1": {
"key": "stoke",
"name": "Stoke City",
"code": "STK"
},
"team2": {
"key": "liverpool",
"name": "Liverpool",
"code": "LIV"
},
"score1": 0,
"score2": 1
},
{
"date": "2015-08-10",
"team1": {
"key": "westbrom",
"name": "West Bromwich Albion",
"code": "WBA"
},
"team2": {
"key": "mancity",
"name": "Manchester City",
"code": "MCI"
},
"score1": 0,
"score2": 3
}
]
}
Ответ 6
Просто используйте _.uniqBy(). Создает версию массива без дубликатов.
Это новый способ, доступный с версии 4.0.0.
_.uniqBy(data, 'id');
или же
_.uniqBy(data, obj => obj.id);