为什么Javascript Set不能做独特的对象? [英] Why does Javascript Set not do unique objects?

查看:99
本文介绍了为什么Javascript Set不能做独特的对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

集合应该包含唯一对象,但它不适用于javascript中的对象。

Sets are supposed to contain unique objects, but it doesn't work for objects in 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}

那么如何让它与对象一起使用?我知道它们是具有相同值的不同对象,但我正在寻找类似于深度唯一集合。

So how do I get it to work with objects? I get the fact that they are different objects with the same values, but I'm looking for like a deep unique set.

编辑:

以下是我实际在做的事情

Here's what I'm actually doing

    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列表

This is to get a unique list of sm.p

推荐答案

这是天真的我确信有更好的方法来获取唯一数据(比如让数据库查询返回唯一数据,但这取决于数据库),但是在插入之前你可以检查对象是否已经在集合中。 / p>

This is naive and I'm sure there are better ways of getting unique data (like making the database query return unique data, but that would depend on the database), but you can check to see if the object is already in the set before inserting it.

var m = await(M.find({c: cID}).populate('p')) //database call
var p = new Set();
m.forEach(function(sm){
    if(!p.has(sm.p)) p.add(sm.p)
})

这篇关于为什么Javascript Set不能做独特的对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆