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;}
哇,这就像一个魅力!非常感谢您的快速帮助。你们有并没有看到我在代码中的错误在哪里?你们检查了对象,但数组也是对象。所以你需要检查数组。嗯,这是真的,但是遍历的叶子部分实际上是好的。相反,同时拥有多个分支似乎会删除以前从其他同级子树收集的所有信息。不过还是谢谢你,也许我会自己解决的。