我有一个猫鼬模型集合,我尝试使用uniq
lodash
函数从列表中获取唯一的id,但仍然得到相同的列表。
列表元素为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
]
答案 0 :(得分:1)
由于这些项目是ObjectId的实例,因此您不能使用_.uniq()
,因为不同的对象实例始终是唯一的。您可以使用lodash的_.uniqBy()
,并将对象的str
属性作为唯一标识符:
_.uniqBy(list, 'str')
答案 1 :(得分:1)
问题在于这些对象是ObjectId
对象,并且可能为相同的哈希生成了一个新对象,因此在这种情况下,引用不一样,则可能会发生以下情况:
ObjectId("foo") == ObjectId("foo"); // false
在这种情况下,uniq()
将无法识别相同的ObjectId
。一种解决方案是使用A Deep Dive into Kubernetes Metrics来正确比较它们,例如:
_.uniqBy(ids, id => id.valueOf());
答案 2 :(得分:0)
假设列表是数组,列表中的每个元素都是ObjectId,则应该可以使用。列表中的每个id都会被迭代并转换为用于查找唯一元素的字符串
_.uniqBy(list, (id) => id.toString())
答案 3 :(得分:0)
这甚至适用于objectId数组
function onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}
const uniqueArray=yourArray.filter(onlyUnique);