簡體   English   中英

javascript中如何將數組轉為樹結構

[英]How to convert array into a tree structure in 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'}
]

預期 Output 是這樣的。 如有語法錯誤請忽略

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

                  ]
              }
            
            ]
        }
    ]

您可以使用reduceforEach方法來創建嵌套結構以及一個數組,您可以在其中指定要迭代的鍵的順序。

 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)

基於@Nenad Vracar 的回答,如果你想用作動態數組值,請使用Object.keys()reverse

 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", "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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM