javascript - 如何遍历 JSON 树
问题描述
请我想将下面的 JSON 转换为对象数组。我在递归方面很糟糕,我整天都在挣扎。请帮助将不胜感激。
{
"org_name":"paradise island",
"daughters" : [
{
"org_name": "banana tree",
"daughters": [
{"org_name":"Yellow Banana"},
{"org_name":"Brown Banana"}
]
},
{
"org_name": "big banana tree",
"daughters": [
{"org_name":"green banana"},
{"org_name":"yellow banana"},
{
"org_name": "Black banana",
"daughters": [
{"org_name": "red spider"}
]
}
]
}
]
}
我希望它被转换如下:
[
{id:1, name:'paradise island', parent: null},
{id:2, name:'Banana Tree', parent: 1},
{id:3, name:'yellow banana', parent: 2}
]
顺序无关紧要。重要的是根据父母与孩子的正确身份关系。我打算将 id 生成为 UUID。但是您可以随心所欲地生成它。
解决方案
看起来很简单,只需在函数之外为未使用的标识符声明一个变量,让函数将当前对象推送到数组,并在其每个子对象上调用该函数(如果它们存在):
const input={"org_name":"paradise island","daughters":[{"org_name":"banana tree","daughters":[{"org_name":"Yellow Banana"},{"org_name":"Brown Banana"}]},{"org_name":"big banana tree","daughters":[{"org_name":"green banana"},{"org_name":"yellow banana"},{"org_name":"Black banana","daughters":[{"org_name":"red spider"}]}]}]};
let nextUnusedId = 0;
const addToArr = ({ org_name: name, daughters }, parent = null, addTo = []) => {
const id = nextUnusedId++;
addTo.push({ id, name, parent });
if (daughters) daughters.forEach(daughter => addToArr(daughter, id, addTo));
return addTo;
};
console.log(
addToArr(input)
);
推荐阅读
- python - 如何使用 wiktextract
- java - Eclipse 显示视图不会显示
- c++ - 关于 C++ 中声明和定义之间区别的混淆
- git - Jenkins git clone 间歇性失败
- react-native - 删除“填充”时“视图”消失
- hive - com.tableausoftware.jdbc.TableauJDBCException:读取准备好的查询的元数据时出错
- mysql - 如何使用 Angular 从两个表中获取数据并在 HTML 中显示它们?
- json - 在 deluge 脚本中访问多个 JSON 对象
- javascript - 如何从浏览器获取基本身份验证信息
- django - 在 django 应用程序的 Docker 容器中处理 RACE CONDITION,包括 postgres、nginx、celery、redis、elasticsearch