簡體   English   中英

將具有父/子關系的對象數組轉換為嵌套對象數組

[英]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.

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