【问题标题】:Json object to arrays for network graphJson 对象到网络图的数组
【发布时间】:2019-05-01 11:55:26
【问题描述】:

我正在尝试构建一个网络图,其点数据为 [[from, to], [from,to]]。因此,我需要从 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'],
]

【问题讨论】:

  • Depth of the object can vary. 您需要解释潜在的变化。我们只能为您提供的内容提供帮助,目前这是一个明确定义的结构。
  • @Archer 如果我得到了发布对象的解决方案,我想我可以从中找到解决方案。

标签: javascript node.js angular highcharts-ng


【解决方案1】:

您可以使用递归生成器:

  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)];

【讨论】:

  • 很好的解决方案。但似乎它仅适用于 node.js 和 ES6。它不适用于 Angular/Typescript
猜你喜欢
  • 1970-01-01
  • 2020-03-31
  • 2018-11-13
  • 2011-01-10
  • 1970-01-01
  • 2020-08-02
  • 2019-04-28
  • 1970-01-01
  • 2015-02-22
相关资源
最近更新 更多