我正在用Javascript查询数据库,并在其中获取Map对象。问题在于映射中某些条目的键是一个对象,确切地说是EnumValue。
我似乎找不到直接检索此类条目的方法 我唯一想到的就是迭代地图的每个键,并检查它是否是对象。
因此,如果我console.log从查询中获得的输出,则看起来像这样:
Map {
EnumValue { typeName: 'T', elementName: 'label' } => 'user',
'gender' => [ 'f' ],
'identityid' => [ '2349fd9f' ],
'name' => [ 'Erika' ],
'email' => [ 'test1@test.com' ],
EnumValue { typeName: 'T', elementName: 'id' } => 4136,
'lastname' => [ 'Delgato' ]
}
我已经很天真地尝试使用以下方式获取条目:
const enumId = { typeName: 'T', elementName: 'label' };
map.get(enumId)
但是当然它返回的是未定义的。
有什么想法吗?
答案 0 :(得分:0)
通过引用在javascript中进行映射。它没有进行深入的比较,仅检查指针是否相同。 这将不起作用:
var x = new Map()
x.set({},'lala')
x.get({}) // undefined
但这会起作用:
var x = new Map()
var player = {name: 'ben'}
x.set(player, 50)
x.get(player) // 50
答案 1 :(得分:0)
因此,为节省时间,避免在其他困扰该问题的人那里找到解决方案。
此问题特定于使用gremlin javascript客户端(此处使用3.4.2版)在Janusgraph数据库中进行值检索。
将valueMap(true)附加到遍历时,结果就是我发布的问题中的那个。 通过gremlin库,我发现在gremlin.process.t的对象t内可以找到以下EnumValues:
id
key
label
value
然后使用id或标签,可以使用那些讨厌的键直接检索值。
一个例子:
// Let's say we already have the Map from the question stored in a map variable
// To get the id of the result you can do the following
const t = gremlin.process.t;
const id = map.get(t.id);
console.log(id) // 4136