JavaScript, как получить значение из карты, которая имеет EnumValue в качестве ключа - PullRequest
1 голос
/ 16 июня 2019

Я запрашиваю базу данных в 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 голосов
/ 17 июня 2019

Итак, чтобы сэкономить время кому-либо еще, кто занимается этой проблемой, я напишу решение здесь.

Эта проблема относится к извлечению значений в базе данных Janusgraph с использованием клиента gremlin javascript (версия3.4.2 используется здесь.Просматривая библиотеку gremlin, я обнаружил, что внутри объекта t из gremlin.process.t можно найти следующие значения Enum:

id
key
label
value

Затем, используя идентификатор или метку, можно напрямую получить значения с помощьюэти противные ключи.

Пример:

// 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
0 голосов
/ 16 июня 2019

Карта в 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
...