[英]Convert array of objects with parent / child relationships to array of nested objects
我在將對象數組轉換為另一個嵌套對象數組時遇到問題。 如何在下面的示例代碼中將table
轉換為看起來像transformedTable
?
輸入數據:
const table = [
{id: 1, isMain: null, parentId: null, name:"john"},
{id: 2, isMain: true, parentId: null, name:"sam"},
{id: 3, isMain: null, parentId: 2, name:"samantha"},
{id: 4, isMain: true, parentId: null, name:"kate"},
{id: 5, isMain: true, parentId: 4, name:"jonathan"},
{id: 6, isMain: null, parentId: 4, name:"walter"},
{id: 7, isMain: null, parentId: 5, name:"clara"}
]
我想將上面的數據轉換成這樣:
transformedTable = [{
id: 1,
isMain: null,
parentId: null,
name: "john"
},
{
id: 2,
isMain: true,
parentId: null,
name: "sam",
kids: [{
id: 3,
isMain: null,
parentId: 2,
name: "samantha"
}]
},
{
id: 4,
isMain: true,
parentId: null,
name: "kate",
kids: [{
id: 5,
isMain: true,
parentId: 4,
name: "jonathan",
kids: [{
id: 7,
isMain: null,
parentId: 5,
name: "clara"
}]
},
{
id: 6,
isMain: null,
parentId: 4,
name: "walter"
},
]
},
]
您可以嵌套幾個循環以比較每個對象,並在需要的地方添加“ kids”屬性。 然后,對結果數組進行過濾以僅保留最終的父級(包含所有嵌套子級)。 請參見下面的工作片段:
const table = [ {id: 1, isMain: null, parentId: null, name:"john"}, {id: 2, isMain: true, parentId: null, name:"sam"}, {id: 3, isMain: null, parentId: 2, name:"samantha"}, {id: 4, isMain: true, parentId: null, name:"kate"}, {id: 5, isMain: true, parentId: 4, name:"jonathan"}, {id: 6, isMain: null, parentId: 4, name:"walter"}, {id: 7, isMain: null, parentId: 5, name:"clara"} ]; const kid = (p, c) => { if (p.hasOwnProperty('kids')) { p.kids.push(c); } else { p.kids = [c]; } } for (let i = 0; i < table.length - 1; i++) { let a = table[i]; for (let j = i + 1; j < table.length; j++) { let b = table[j]; if (a.id === b.parentId) { kid(a, b); } else if (b.id === a.parentId) { kid(b, a); } } } let result = table.filter(x => !x.parentId); console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.