我有一些来自mongoDB的json数据如下:
[
{
"_id": {
"$oid": "1"
},
"name": "A Inc",
"children": [
{"$oid": "2"},{"$oid": "3"}],
"kind": "Organisation"
},
{
"_id": {
"$oid": "2"
},
"name": "ACS",
"children": [{"$oid": "4"}],
"kind": "Organisation"
},
{
"_id": {
"$oid": "3"
},
"name": "ABC Inc",
"children": [],
"kind": "Organisation"
},
{
"_id": {
"$oid": "5"
},
"name": "Disney",
"children": [some other ids],
"kind": "Channel"
},
...
]
字符串
我不知道如何创建一个森林或多个树__(但不知道每棵树的根)__,理想情况下,我想生成一个数据结构,使用复活方法将所有这些数据链接在一起,但我面临的问题是有时它会有重复的层,像
100d1x
的字符串
有些孙子还在children中,我希望有一些算法来处理这种情况,如果id在叶子层,它不会在上层,这意味着,每个id理论上应该出现一次。
下面是我目前的实现:
const data = require("./nodes.json");
function createTree(data, rootId) {
const root = data.find((item) => item._id.$oid === rootId);
if (!root) return null;
const children = root.children.map((child) => createTree(data, child.$oid));
return {
...root,
children,
};
}
function prettyPrint(node, level = 0) {
if (node.children) {
node.children.forEach((child) => {
console.log(
`${" ".repeat(level)} (${child.kind}) ${child.name} ${child._id.$oid}`
);
prettyPrint(child, level + 2);
});
}
}
const forest = data.map((item) => createTree(data, item._id.$oid));
prettyPrint(forest);
型
理想的结构应该是这样的,但我不知道1
,2
是不是根,也许有一些99
是1
,2
的根。唯一的方法可能是从数据构建树,然后从数据结构中找到根。
的
1条答案
按热度按时间rta7y2nd1#
你的方向是对的。为避免重复,请复制您返回的根目录。一种简单的方法是解析字符串化的对象。
edit我的理解是OP的目标是找到数据中的所有“根”。这些被定义为没有父。首先找到这些,然后在每个根下递归地构建树...
字符串