Возврат массива объектов из другого объекта - PullRequest
1 голос
/ 03 мая 2019

Здравствуйте, я пытаюсь извлечь некоторую информацию из объекта для создания графика, но он возвращает неопределенное значение, мой объект выглядит как

{
"concepts": [
        {
            "id_cpt": "1",
            "fr_cpt": "Proche",  
        },
        {
            "id_cpt": "2",
            "fr_cpt": "Loin",  
        }{
            "id_cpt": "3",
            "fr_cpt": "Here",  
        },...
],
"arcs":  [
     {
       "idfrom":"1",
       "idto":"2"
     },
     {
       "idfrom":"3",
       "idto":"2"
     },....
]
}

Я хочу, чтобы объект выглядел как

const data = {
    nodes: [{ id: 'Proche' }, { id: 'Loin' },{ id: 'Here' } ...],
    links: [{ source: 'Proche', target: 'Loin' }, { source: 'Here', target: 'Loin' },...]
};

Я хочу извлечь имена, а не идентификаторы в ссылках, но у дуг объекта есть только идентификаторы кода в es6, и спасибо за помощь

1 Ответ

0 голосов
/ 03 мая 2019

Вы можете просмотреть concepts, используя for...of. Заполните массив nodes и объект map. map объект имеет id_cpt в качестве ключа и fr_cpt в качестве значения.

{
  "1": "Proche",
  "2": "Loin",
  "3": "Here"
}

Этот объект можно использовать для получения значений source и target для links. Затем переберите arcs и создайте links, используя map object

Вот фрагмент:

const input = {"concepts":[{"id_cpt":"1","fr_cpt":"Proche",},{"id_cpt":"2","fr_cpt":"Loin",},{"id_cpt":"3","fr_cpt":"Here",},],"arcs":[{"idfrom":"1","idto":"2"},{"idfrom":"3","idto":"2"},]}

let nodes = [], 
    links = [], 
    map = {};

for (const { id_cpt, fr_cpt } of input.concepts) {
  nodes.push({ id: fr_cpt });
  map[id_cpt] = fr_cpt
}

for (const { idfrom, idto } of input.arcs) {
  links.push({ source: map[idfrom], target: map[idto] }) // get the value using map
}

const output = { nodes, links }

console.log(output)
...