JS lodash uniq не работает со списком ObjectID - PullRequest
0 голосов
/ 01 марта 2019

У меня есть коллекция моделей мангустов, я пытался использовать функцию uniq lodash для получения уникальных идентификаторов из списка, но все равно получал тот же список.

Элементы списка https://docs.mongodb.com/manual/reference/method/ObjectId/

const uniqueIds = uniq(ids) // not working

вход:

[ 
  5c6f98ceb3f013291b497d82,
  5c6e447147c75d699f0514a1,
  5c6e447147c75d699f0514a1,
  5c6e447147c75d699f0514a1,
  5c6f98cfb3f013291b497d89,
  5c6f98cfb3f013291b497d89,
  5c6f98cfb3f013291b497d89,
  5c6f98cfb3f013291b497d89,
  5c6f98cfb3f013291b497d89,
  5c6f98cfb3f013291b497d89 
]

выход:

    [ 
      5c6f98ceb3f013291b497d82,
      5c6e447147c75d699f0514a1,
      5c6e447147c75d699f0514a1,
      5c6e447147c75d699f0514a1,
      5c6f98cfb3f013291b497d89,
      5c6f98cfb3f013291b497d89,
      5c6f98cfb3f013291b497d89,
      5c6f98cfb3f013291b497d89,
      5c6f98cfb3f013291b497d89,
      5c6f98cfb3f013291b497d89
    ]

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Проблема в том, что это ObjectId объекты, и, вероятно, для того же хеша создается новый объект, поэтому в этом случае ссылки не совпадают, вероятно, произойдет следующее:

ObjectId("foo") == ObjectId("foo"); // false

В этом случае uniq() не сможет распознать тот же ObjectId.Решением было бы использовать uniqBy() для их правильного сравнения, например:

_.uniqBy(ids, id => id.valueOf());
0 голосов
/ 01 марта 2019

Поскольку элементы являются экземплярами ObjectId , вы не можете использовать _.uniq(), потому что разные экземпляры объектов всегда уникальны.Вы можете использовать lodash _.uniqBy() со свойством str объекта в качестве уникального идентификатора:

_.uniqBy(list, 'str')
...