簡體   English   中英

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)

但當然它返回未定義。

有任何想法嗎?

因此,為了節省其他遇到此問題的人的時間,我將在此處編寫解決方案。

此問題特定於使用 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

映射在 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM