我目前正试图改造一棵树,以这种形式给出:
{"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)
};
但是,由于根节点(在本例中为#34; Parent")并未包含在转换后的树中,因此显然存在关于正确递归和构建对象的一些错误。此外,如果树在多个子树中分支,则该方法失败。在这种情况下,只有最后一个被识别。 我最好的猜测是,在弹出递归的堆栈时,存储的对象会丢失,但不知怎的,我无法将其转换为解决方案。 如果你有任何想法,这个错误来自哪里,我将非常感激!
答案 0 :(得分:0)
您可以采用递归方法并迭代所有键并构建新对象并获取数组或将对象用于下一次递归调用。
function getParts(object) {
return Array.isArray(object)
? object
: Object.keys(object).map(function (k) {
return { name: k, children: getParts(object[k]) };
});
}
var data = { Parent: { Child1: ["toy1"], Child2: { Nephew: ["toy2", "toy3"] } } },
result = { name: 'root', children: getParts(data) };
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }