javascript - 为什么 Javascript Set 不做唯一对象?

标签 javascript

集合应该包含唯一的对象,但它不适用于 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/

相关文章:

javascript - jsx图: how to change line properties after draw

javascript - jquery 如果长度大于 x,则在字符之间添加破折号

javascript - 在 Javascript 中获取 ClientID

javascript - javascript中调用另一个类函数中的类函数

javascript - 将单词随机分成定义长度组的算法

javascript - jquery mouseenter 不适用于特定 div

javascript - 为什么当我通过浏览器打开 html 页面时我的倒计时应用程序可以正常工作,但当我使用 http 服务器时却不能?

javascript - 未捕获的类型错误 : Cannot read property 'createMediaElementSource' of null

javascript - 在同一视口(viewport)中加载多个 obj 元素

php - 客户端到客户端的实时网络更新