javascript - 如何从 JavaScript 对象创建树状结构
问题描述
这是我得到的对象示例:
输入 :
{“人物”:[{“id”:“12”,“parentId”:“0”,“text”:“Man”,“level”:“1”,“children”:null},{“id” :“6”,“parentId”:“12”,“text”:“男孩”,“level”:“2”,“children”:null },{“id”:“7”,“parentId”:“ 12”,“文本”:“其他”,“级别”:“2”,“孩子”:null },{“id”:“9”,“parentId”:“0”,“text”:“女人”,“level”:“1”,“children”:null },{“id”:“11”,“parentId”:“ 9”,“文本”:“女孩”,“级别”:“2”,“孩子”:空 } ] }女孩”,“级别”:“2”,“孩子”:null } ] }女孩”,“级别”:“2”,“孩子”:null } ] }
我想把它转换成这样的 JSON 格式:
{
"People": [
{
"id": "12",
"parentId": "0",
"text": "Man",
"level": "1",
"children": [
{
"id": "6",
"parentId": "12",
"text": "Boy",
"level": "2",
"children": null
},
{
"id": "7",
"parentId": "12",
"text": "Other",
"level": "2",
"children": null
}
]
}
}
任何想法/帮助将不胜感激
解决方案
您可以使用一个对象来引用子级或父级,并收集子级和父级以仅获取根的人。
var data = { John: "James", Samar: "Michel", Albert: "Michel", Michel: "James", James: "Sarah" },
parents = new Set,
children = new Set,
references = {},
result;
Object
.entries(data)
.forEach(([child, parent]) => {
references[child] = references[child] || [];
references[parent] = references[parent] || [];
references[parent].push({ [child]: references[child] });
parents.add(parent);
children.add(child);
});
result = [...parents]
.filter(p => !children.has(p))
.map(p => ({ [p]: references[p] }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- vue.js - 如何找出用 nuxtJS 定义的丢失路由的位置?
- android - MpAndroidChart 中 xAxis 上的自定义标签指示器
- git - 使用项目访问令牌访问 GitLab 存储库
- mysql - Spring - 显示事务日志
- python - Django过滤本地文件夹
- c++ - 如何在不使用 & 运算符的情况下将变量的物理地址直接传递给指针?
- python - Python从使用字符串列表开始删除多行
- mysql - MySQL告诉如果没有火车旅行路线返回从到达站开始
- sql-server - 事务中的 SQL Server 部分提交
- azure - 如何在 MSAL 角度配置中为所有不需要的 API 添加范围 null