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);