Как получить arr [0] из массива объектов карты? - PullRequest
0 голосов
/ 10 июля 2020

const gremlin = require('gremlin');

let graphHost = 'x.x.x.x';
let graphPort = 'xxxx';

let graph = new gremlin.driver.Client(`ws://${graphHost}:${graphPort}/gremlin`, { traversalSource: 'g' });
//Gremlin.createClient(graphPort, graphHost)
// console.log('appObj inside executeGraph',  args['appObj'] )
console.log(`graphHost: ${graphHost} graphPort: ${graphPort}`);

function map_to_object(res) {
  const out = Object.create(null)
  console.log('out,res',out,Object.keys(res),res,Array.isArray(res),res.length)
  Object.keys(res).forEach((value, key) => {
    if (value instanceof Map) {
      console.log('value,key',value,key)
      out[key] = map_to_object(value)
      console.log('out[key]',out[key])
    }
    else {
      out[key] = value
      console.log('out[key] in else and out is',out[key],out)
    }
  })
  return out
}

let query= `g.V().hasLabel('Persona').has('personaId', 'ZvBX2Mbvd2PM9T6gWRqPQd8qZm83') .outE('lovedOne').has('relation')
.as('e').inV().not(has('isDeleted', true)).select('e') .order().by(inV().values('dateOfBirth'),incr) 
.project('relation','lovedOne') .by(select('e').valueMap('relation', 'relationGroup', 'classification', 'on')) 
.by(select('e').inV().valueMap('personaId', 'callingName', 'dateOfBirth', 'isTempDob', 'gender', 'imageUrl', 'isDeleted')) 
.group().by(select('e').values('relationGroup'))`;
 graph.submit(query, {}).then(results =>{
  console.log('results in graph', results)
  for (let data of results){
    var mapObj = data 
    console.log('mapObj', mapObj);
    map_to_object(results);
 }
 })

У меня есть массив типа

res: [
  Map {
    'Close Friends' => [ [Map] ],
    'Extended Family' => [ [Map] ],
    'Friends' => [ [Map] ],
    'Immediate Family' => [ [Map], [Map] ]
  }
]

Когда я пытаюсь распечатать res [0] в серверной службе, он печатается как не определено. Итак, я попытался распечатать длину массива и подтвердил, является ли он массивом или нет.

console.log('array first element ',res[0])
console.log('is it an array? and length',Array.isArray(res),res.length)

==> array first element undefined
==> is it an array? and length false 1

Я хочу, чтобы эта структура карты была напечатана, а затем я хочу преобразовать ее в обычный объект.

Для приведенного ниже фрагмента кода результат, который я получаю в моем терминале vscode, равен

results in graph [
  Map {
    'Close Friends' => [ [Map] ],
    'Extended Family' => [ [Map] ],
    'Friends' => [ [Map] ],
    'Immediate Family' => [ [Map], [Map] ]
  }
]
mapObj Map {
  'Close Friends' => [ Map { 'relation' => [Map], 'lovedOne' => [Map] } ],
  'Extended Family' => [ Map { 'relation' => [Map], 'lovedOne' => [Map] } ],
  'Friends' => [ Map { 'relation' => [Map], 'lovedOne' => [Map] } ],
  'Immediate Family' => [
    Map { 'relation' => [Map], 'lovedOne' => [Map] },
    Map { 'relation' => [Map], 'lovedOne' => [Map] }
  ]
}
out,res [Object: null prototype] {} [ '_items', 'attributes', 'length' ] [
  Map {
    'Close Friends' => [ [Map] ],
    'Extended Family' => [ [Map] ],
    'Friends' => [ [Map] ],
    'Immediate Family' => [ [Map], [Map] ]
  }
] false 1
out[key] in else and out is _items [Object: null prototype] { '0': '_items' }
out[key] in else and out is attributes [Object: null prototype] { '0': '_items', '1': 'attributes' }
out[key] in else and out is length [Object: null prototype] {
  '0': '_items',
  '1': 'attributes',
  '2': 'length'
}
...