Javascript 如何从以 EnumValue 为键的 Map 中检索值

Javascript how to retrieve value from a Map that has an EnumValue as key

我正在查询 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)

但当然 returns 未定义。

有什么想法吗?

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

因此,为了节省遇到此问题的其他人的时间,我将在此处编写解决方案。

此问题特定于使用 gremlin javascript 客户端(此处使用的版本 3.4.2)在 Janusgraph 数据库中检索值。

将 valueMap(true) 附加到遍历时,结果是我发布的问题中的结果。 通过 gremlin 库,我发现在 gremlin.process.t 的对象 t 中可以找到这个 EnumValues:

id
key
label
value

然后使用 id 或 label 可以直接检索带有那些讨厌的键的值。

一个例子:

// 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