Javascript JS/ES6中递归转换树
我目前正在尝试转换一棵树,如下表所示:Javascript JS/ES6中递归转换树,javascript,recursion,data-structures,tree,Javascript,Recursion,Data Structures,Tree,我目前正在尝试转换一棵树,如下表所示: {"Parent": { "Child1": ["toy1"], "Child2": { "Nephew": ["toy2", "toy3"] } } } { "name": "root", "children": [{"name":"Parent", "children": [{ "na
{"Parent":
{
"Child1": ["toy1"],
"Child2":
{
"Nephew": ["toy2", "toy3"]
}
}
}
{
"name": "root",
"children":
[{"name":"Parent",
"children":
[{
"name":"Child1",
"children": ["toy1"]
},
{
"name":"Child2"
"children":
[{
"name":"Nephew",
"children": ["toy2", "toy3"]
}]
}]
}]
}
进入以下形式的树:
{"Parent":
{
"Child1": ["toy1"],
"Child2":
{
"Nephew": ["toy2", "toy3"]
}
}
}
{
"name": "root",
"children":
[{"name":"Parent",
"children":
[{
"name":"Child1",
"children": ["toy1"]
},
{
"name":"Child2"
"children":
[{
"name":"Nephew",
"children": ["toy2", "toy3"]
}]
}]
}]
}
所以基本上我想标准化树的结构。 我用以下代码进行了尝试:
function recurse(elem) {
if (typeof(elem) !== "object") return elem;
level = [];
for (let part in elem) {
level.push({
name: part,
children: recurse(elem[part])
});
console.log(level);
}
return level;
}
restrucTree = {
name: "root",
children: recurse(tree)
};
但显然,在正确递归和对象构建方面存在一些错误,因为根节点(在本例中为“父节点”)不包括在转换树中。此外,如果树在多个子树中分支,该方法将失败。在这种情况下,只识别最后一个。
我最好的猜测是,在弹出递归堆栈时,存储的对象丢失了,但不知何故,我无法将其转换为解决方案。
如果你知道这个错误是从哪里来的,我将非常感激 您可以采用递归方法,迭代所有键并构建新对象,然后为下一次递归调用获取数组或对象
函数getParts(对象){
返回数组.isArray(对象)
对象
:Object.keys(对象).map(函数(k){
返回{name:k,children:getParts(object[k])};
});
}
var data={Parent:{Child1:[“toy1”],Child2:{Nephew:[“toy2”,“toy3”]},
结果={name:'root',子项:getParts(data)};
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
哇,这就像一个魅力!非常感谢您的快速帮助。你们有并没有看到我在代码中的错误在哪里?你们检查了对象,但数组也是对象。所以你需要检查数组。嗯,这是真的,但是遍历的叶子部分实际上是好的。相反,同时拥有多个分支似乎会删除以前从其他同级子树收集的所有信息。不过还是谢谢你,也许我会自己解决的。