gpt4 book ai didi

javascript - 处理 JSON 以创建子级与父级的层次关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:18 24 4
gpt4 key购买 nike

我在这里得到了类似的答案,但我一直在寻找与此相反的东西,所以我从这个答案中获得帮助来解释我的问题: Process JSON to create the hierarchical relationship

所以,我有这样的原始数据:

{
"my_data": [
{
"name": "bugs_db",
"type": "database",
"children": [
{
"name": "oss",
"type": "ui"
},
{
"name": "dashboard",
"type": "ui"
},
{
"name": "dev-dash",
"type": "ui"
}
]
},
{
"name": "oss",
"type": "ui",
"children": [
{
"name": "active-directory",
"type": "nfs"
},
{
"name": "passive-directory",
"type": "FAT32"
},
{
"name": "jira_db",
"kind": "database"
}
]
},
{
"name": "jira_db",
"type": "database",
"children": [
{
"name": "oss",
"kind": "ui"
},
{
"name": "something",
"kind": "ui"
}
]
},
{
"name": "active_directory",
"type": "nfs",
"children": []
}
]
}

我需要处理上面的数据来列出一个 child 的所有 parent ..例如,如果我选择“name”=“oss”,那么层次关系应该是这样的:

{
"name": "oss",
"type": "ui",
"parents": [
{
"name": "bugs_db",
"type": "database",
"parents": [
]
},
{
"name": "jira_db",
"type": "database"
}
]
}

也可以有一些循环关系.. 例如。 oss 是 bugs_db 的 child ,而 bugs_db 也是 oss 的 child 。在这种情况下,只需进一步跳过并向父对象添加键“circular”:true。我想我可以尝试使用 for 循环进行处理并实现此目的。但我正在寻找此处建议的一些类似解决方案:https://stackoverflow.com/a/50491255

最佳答案

基本上,您可以使用相同的方案来测试循环引用和过滤父项。

function getParents(name, visited = new Set) {
var item = map.get(name);

if (!item) {
return item;
}

if (visited.has(name)) {
return { name, type: item.type, circular: true };
}

visited.add(name);

return {
name,
type: item.type,
parent: object.my_data
.filter(({ children }) => children.some(o => o.name === name))
.map(({ name }) => getParents(name, visited))
};
}

var object = { my_data: [{ name: "bugs_db", type: "database", children: [{ name: "oss", type: "ui" }, { name: "dashboard", type: "ui" }, { name: "dev-dash", type: "ui" }] }, { name: "oss", type: "ui", children: [{ name: "active-directory", type: "nfs" }, { name: "passive-directory", type: "FAT32" }, { name: "jira_db", kind: "database" }] }, { name: "jira_db", type: "database", children: [{ name: "oss", kind: "ui" }, { name: "something", kind: "ui" }] }, { name: "active_directory", type: "nfs", children: [] }] },
map = new Map(object.my_data.map(o => [o.name, o]));

console.log(getParents("oss"));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 处理 JSON 以创建子级与父级的层次关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50928452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com