簡體   English   中英

將具有樹結構的數組轉換為Javascript中的對象

[英]Convert array with tree structure to object in Javascript

我有以下格式的數組

 let array = [{id: 1, desc: 'd1', children:[{id:1.1, desc:'d1.1', children:[]}]}, 
                 {id:2, desc:'d2', children:[] }, 
                 {id:3, desc:'d3', children:[] }];

每個子元素與父元素在同一時間。 我希望將其轉換為格式為{ [id]: {values} }

{
 1: { id: 1, desc: 'd1', children: {1.1: {id:1.1, desc:'d1.1'}},
 2: { id:2, desc:'d2' },
 3: { id:3, desc:'d3' }
}

我嘗試了很多方法,但都沒有成功。 例如:

let obj = array.map(a => mapArrayToObj(a));

mapArrayToObj = (e) => { 
     let obj = {[e.id]: e };
     if(e.children.lenght > 0){
       e.children = e.children.map(c => mapArrayToObj(c)); 
     }
     else{
       return {[e.id]: e }; 
     }
}

在JavaScript中甚至可行嗎?

您可以使用遞歸函數,該函數從給定的項目中生成一個對象,而無需更改原始數據。

 function getObjects(array) { var object = {}; array.forEach(function (item) { object[item.id] = Object.assign({}, item, { children: getObjects(item.children) }); }); return object; } var array = [{ id: 1, desc: 'd1', children: [{ id: 1.1, desc: 'd1.1', children: [] }] }, { id: 2, desc: 'd2', children: [] }, { id: 3, desc: 'd3', children: [] }]; console.log(getObjects(array)); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

讓我們嘗試使用此代碼...

let array = [{id: 1, desc: 'd1', children:[{id:1.1, desc:'d1.1', children:[]}]},
    {id:2, desc:'d2', children:[] },
    {id:3, desc:'d3', children:[] }]

let object = {}

array.forEach(item => {
    let children = item.children
    object[item.id] = item
    object[item.id].children = {}
    children.forEach(child => {
        object[item.id].children[child.id] = child
    })
})

console.log(object)

結果:

{ '1': { id: 1, desc: 'd1', children: { '1.1': [Object] } },
  '2': { id: 2, desc: 'd2', children: {} },
  '3': { id: 3, desc: 'd3', children: {} } }

您可以使用reduce()方法創建遞歸函數並返回對象對象。

 let array = [{id: 1, desc: 'd1', children:[{id:1.1, desc:'d1.1', children:[]}]}, {id:2, desc:'d2', children:[] }, {id:3, desc:'d3', children:[] }] function build(data) { return data.reduce(function(r, {id, desc, children}) { const e = {id, desc} if(children && children.length) e.children = build(children); r[id] = e return r; }, {}) } const result = build(array) console.log(result) 

暫無
暫無

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

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