javascript - Json 对象到网络图的数组
问题描述
我正在尝试构建一个网络图,其点数据为 [[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'],
]
解决方案
您可以使用递归生成器:
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)];
推荐阅读
- c - 得到一个小数,然后是字符串,然后是带空格的小数
- qt - 捆绑资源的 Qt 文件名
- java - 在 MVC 中,与应用程序模型相对的 GUI 模型是什么?
- python - urllib3 HTTPResponse.read() 返回空字节
- angular - 我应该如何在 Angular 中使用 ES2020?
- regex - Visual Studio 正则表达式模式不起作用:^.*Foo[^.,]\(+.*$
- python - 接收长度为 0 的映射的“'hmset'”错误
- django - 具有 OneToOne 父级的 Django 子模型不继承父级的字段?
- python - 我应该如何从 Python 3.8 降级到 Python 3.7?
- wordpress - 根据带有参数的wordpress上的位置重定向到自定义网址