【发布时间】:2016-12-31 01:20:19
【问题描述】:
集合应该包含唯一的对象,但它不适用于 javascript 中的对象。
var set = new Set()
<- undefined
set.add({name:'a', value: 'b'})
<- Set {Object {name: "a", value: "b"}}
set.add({name:'a', value: 'b'})
<- Set {Object {name: "a", value: "b"}, Object {name: "a", value: "b"}}
它适用于原语
var b = new Set()
<- undefined
b.add(1)
<- Set {1}
b.add(2)
<- Set {1, 2}
b.add(1)
<- Set {1, 2}
那么如何让它与对象一起工作呢?我知道它们是具有相同值的不同对象,但我正在寻找一个深度独特的集合。
编辑:
这就是我实际在做的事情
var m = await(M.find({c: cID}).populate('p')) //database call
var p = new Set();
m.forEach(function(sm){
p.add(sm.p)
})
这是为了得到一个唯一的sm.p列表
【问题讨论】:
-
“我知道它们是具有相同值的不同对象” - 没错。它们是不同的对象。即使它们最初具有唯一的属性值,在添加到集合后也可以修改为具有相同的属性值。
-
@nnnnnn 那么我如何实现我正在寻找的一组具有唯一值的对象? (我也会接受一组唯一的对象值)
-
这个question 可能会有所帮助。
-
@MattWestlake,很可能您不想将对象用作集合的键,而是使用带有排序键的 JSON 序列化。
-
如果您正在执行数据库操作,您不能让数据库查询首先返回唯一的结果吗?数据库擅长这类事情。
标签: javascript