集合应该包含唯一的对象,但它不适用于 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的唯一列表
最佳答案
另一种选择是您可以使用 JSON.stringify()
来保持对象的唯一性,这样它就可以与字符串而不是对象引用进行比较。
set.add(JSON.stringify({name:'a', value: 'b'}))
然后在格式化所有内容后,您可以将这些行解析回数组,如下所示:
const formattedSet = [...set].map(item) => {
if (typeof item === 'string') return JSON.parse(item);
else if (typeof item === 'object') return item;
});
关于javascript - 为什么 Javascript Set 不做唯一对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41404607/