Javscript如何从以EnumValue作为键的地图中检索值

时间:2019-06-16 17:24:36

标签: javascript dictionary gremlin janusgraph

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

但是当然它返回的是未定义的。

有什么想法吗?

2 个答案:

答案 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