JavaScript最簡潔根據(jù)parentId將數(shù)據(jù)遞歸成樹狀

假設(shè)數(shù)據(jù)如下

const data = [
        { id: 2, name: "研發(fā)部", parentId: 1 },
        { id: 4, name: "行政人事部", parentId: 1 },
        { id: 6, name: "行政人事部下面的行政", parentId: 4 },
        { id: 7, name: "行政人事部下面的人力資源", parentId: 4 },
        { id: 20, name: "研發(fā)下面的產(chǎn)品組", parentId: 2 },
        { id: 21, name: "研發(fā)下面的測試組", parentId: 2 },
        { id: 22, name: "研發(fā)下面的運維組", parentId: 2 },
        { id: 23, name: "研發(fā)下面的前端組", parentId: 2 },
        { id: 24, name: "研發(fā)下面的后臺組", parentId: 2 },
        { id: 25, name: "研發(fā)下面的移動開發(fā)組", parentId: 2 },
        { id: 99, name: "移動組下面的組", parentId: 25 },
        { id: 98, name: "移動組下面的組", parentId: 25 },
      ];

需要將數(shù)據(jù)組成樹狀 方法如下

      function formatToTree(ary, pid) {
        return ary
          .filter((item) =>
            // 如果沒有父id(第一次遞歸的時候)將所有父級查詢出來
            // 這里認為 item.parentId === 1 就是最頂層 需要根據(jù)業(yè)務(wù)調(diào)整
            pid === undefined ? item.parentId === 1 : item.parentId === pid
          )
          .map((item) => {
            // 通過父節(jié)點ID查詢所有子節(jié)點
            item.children = formatToTree(ary, item.id);
            return item;
          });
      }

       console.log(JSON.stringify(formatToTree(data)));

得到的結(jié)果如下:

     [
        {
          id: 2,
          name: "研發(fā)部",
          parentId: 1,
          children: [
            { id: 20, name: "研發(fā)下面的產(chǎn)品組", parentId: 2, children: [] },
            {
              id: 25,
              name: "研發(fā)下面的移動開發(fā)組",
              parentId: 2,
              children: [
                { id: 99, name: "移動組下面的組", parentId: 25, children: [] },
                { id: 98, name: "移動組下面的組", parentId: 25, children: [] },
              ],
            },
          ],
        },
        {
          id: 4,
          name: "行政人事部",
          parentId: 1,
          children: [
            { id: 6, name: "行政人事部下面的行政", parentId: 4, children: [] },
            {
              id: 7,
              name: "行政人事部下面的人力資源",
              parentId: 4,
              children: [],
            },
          ],
        },
      ];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容