JSON объект массивов для графа сети - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь построить сетевой график, в котором есть данные о точках как [[от, до], [от, до]].Итак, мне нужно построить массив этой формы из объекта JSON.Можете ли вы дать мне способ, которым я могу это сделать?Я знаю, это просто способ, которым мы применяем логику, но я попробовал много способов, и я не смог этого сделать.Поэтому я здесь, чтобы получить хорошую логику, которая применима для любой глубины объекта.

Мой пример объекта похож на

myObj = {
  Continents : 
  { Asia : {
      India : 1,
      China: 2 ,
      Japan : 3
    },
    Europe : {
      Sweden: 1,
      Norway : 2,
      Finland : 4,
      Denmark : 5
    },
    Africa : {
      Congo : 1,
      Kenya: 2,
      Zimbabwe : 3
    }
  }
}

Глубина объекта может варьироваться.И теперь мне нужно сделать массив для формирования узлов, как показано ниже.

myArray = [['Continents', 'Asia'],
           ['Continents', 'Europe'],
           ['Continents'], 'Africa'],
           ['Asia','India'],
           ['Asia','China'],
           ['Asia','Japan'],
           ['Europe', 'Sweden'],
           ['Europe', 'Norway'],
           ['Europe', 'Finland'],
           ['Europe', 'Denmark'],
           ['Africa', 'Congo'],
           ['Africa', 'Kenya'],
           ['Africa', 'Zimbabwe'],
]

1 Ответ

1 голос
/ 01 мая 2019

Вы можете использовать рекурсивный генератор:

  function* pairs(obj, parent) {
    for(const [key, value] of Object.entries(obj)) {
       if(parent) yield [parent, key];
       if(typeof value === "object")
          yield* pairs(value, key);
    }
 }

Используется как:

  const result = [...pairs(obj)];
...