猿问

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

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

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:[]

                    }


                  ]

              }

            

            ]

        }

    ]


12345678_0001
浏览 120回答 2
2回答

阿晨1998

您可以使用reduce和forEach方法来创建嵌套结构以及一个数组,您可以在其中指定要迭代的键的顺序。const 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"}]const order = ['grandparent', 'parent', 'name'];const result = [];const levels = {result}data.forEach(o => {  order.reduce((r, e) => {    const name = o[e];    if (!r[name]) {      const value = {name, children: []}      r[name] = {result: value.children}      r.result.push(value)    }    return r[name]  }, levels)})console.log(result)

肥皂起泡泡

如果你想用作动态数组值,请使用Object.keys()和reverseconst 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", "grandgrandparente": "3"}]const result = [];const levels = {result}data.forEach(o => {  const order = Object.keys(o).reverse();  order.reduce((r, e) => {    const name = o[e];    if (!r[name]) {      const value = {name, children: []}      r[name] = {result: value.children}      r.result.push(value)    }    return r[name]  }, levels)})console.log(result)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答