如何在javascript中将数组转换为树结构

如何在javascript中将数组转换为树结构,javascript,arrays,angular,tree,Javascript,Arrays,Angular,Tree,这是我的阵列。我只是想用祖父母->父母->孩子的名字关系来构建一个层次结构树。请帮我修一下。 示例输入如下所示 data = [ {name:'111',parent:'11',grandparent:'1'}, {name:'112',parent:'11',grandparent:'1'}, {name:'121',parent:'12',grandparent:'1'}, {name:'211',parent:'21',grandparent:'2'} ] 预期输出是这样的。如果有语法

这是我的阵列。我只是想用祖父母->父母->孩子的名字关系来构建一个层次结构树。请帮我修一下。 示例输入如下所示

data = 
[
{name:'111',parent:'11',grandparent:'1'},
{name:'112',parent:'11',grandparent:'1'},
{name:'121',parent:'12',grandparent:'1'},
{name:'211',parent:'21',grandparent:'2'}
]
预期输出是这样的。如果有语法错误,请忽略

[
    {
    name:'1',
    children:[
              {
                name:'11',
                children:[
                    {
                        name:'111',
                        children:[]
                    },
                    {
                        name:'112',
                        children:[]
                    }
                ]
              },
              {
                  name:'12',
                  children:[
                    {
                        name:'121',
                        children:[]
                    }
                  ]
              },
              {
                  name:'21',
                  children:[
                    {
                        name:'211',
                        children:[]
                    }

                  ]
              }
            
            ]
        }
    ]

您可以使用
reduce
forEach
方法来创建嵌套结构,还可以使用一个数组来指定要迭代的键的顺序

const data=[{“name”:“111”,“parent”:“11”,“祖父母”:“1”},{“name”:“112”,“parent”:“11”,“祖父母”:“1”},{“name”:“121”,“parent”:“12”,“祖父母”:“1”},{“name”:“211”,“parent”:“21”,“祖父母”:“2”}]
常量顺序=[“祖父母”、“父母”、“姓名”];
常量结果=[];
常量级别={result}
data.forEach(o=>{
降序((r,e)=>{
const name=o[e];
如果(!r[name]){
常量值={name,子项:[]}
r[name]={result:value.children}
r、 结果。推送(值)
}
返回r[名称]
},水平)
})

console.log(结果)
基于@Nenad Vracar answer如果要用作动态数组值,请使用
Object.keys()
reverse

const data=[{“姓名”:“111”,“父母”:“11”,“祖父母”:“1”},{“姓名”:“112”,“父母”:“11”,“祖父母”:“1”},{“姓名”:“121”,“父母”:“12”,“祖父母”:“1”},{“姓名”:“211”,“父母”:“21”,“祖父母”:“2”,“祖父母”:“3”}]
常量结果=[];
常量级别={result}
data.forEach(o=>{
常量顺序=Object.keys(o.reverse();
降序((r,e)=>{
const name=o[e];
如果(!r[name]){
常量值={name,子项:[]}
r[name]={result:value.children}
r、 结果。推送(值)
}
返回r[名称]
},水平)
})

console.log(result)
到目前为止您尝试了什么?只是尝试了一些东西,但在2级之后无法移动。是的,我正在考虑稍后根据dynamic one对其进行修改。但是谢谢你的解决方案,它可以做到这一点@PabloWeb18:)有趣的方法。你从哪里买的?