js实现平级数组的打包

38 阅读1分钟
const arr = [
    {
      "name": "最外层节点",
      "id": "-1",
      "parentId": null
    },
    {
      "name": "第一层节点",
      "id": "1",
      "parentId": "-1"
    },
    {
      "name": "第二层节点",
      "id": "1-1",
      "parentId": "1"
    },
    {
      "name": "第三层节点",
      "id": "1-1-1",
      "parentId": "1-1"
    },
    {
      "name": "第四层节点",
      "id": "1-1-1-1",
      "parentId": "1-1-1"
    },
    {
      "name": "第五层节点",
      "id": "1-1-1-1-1",
      "parentId": "1-1-1-1"
    },
    {
      "name": "第六层节点",
      "id": "1-1-1-1-1-1",
      "parentId": "1-1-1-1-1"
    }
  ]

  function buildTree(arr = []) {
    arr.forEach(item => {
      item.children = arr.filter(v => v.parentId === item.id);
      buildTree(Array.isArray(item?.children) ? item.children : []);
    })
    return arr.filter(v => !v.parentId)
  }
  console.log(buildTree(arr))
  /*
    输出结果:
      [
        {
          "name": "最外层节点",
          "id": "-1",
          "parentId": null,
          "children": [
            {
              "name": "第一层节点",
              "id": "1",
              "parentId": "-1",
              "children": [
                {
                  "name": "第二层节点",
                  "id": "1-1",
                  "parentId": "1",
                  "children": [
                    {
                      "name": "第三层节点",
                      "id": "1-1-1",
                      "parentId": "1-1",
                      "children": [
                        {
                          "name": "第四层节点",
                          "id": "1-1-1-1",
                          "parentId": "1-1-1",
                          "children": [
                            {
                              "name": "第五层节点",
                              "id": "1-1-1-1-1",
                              "parentId": "1-1-1-1",
                              "children": [
                                {
                                  "name": "第六层节点",
                                  "id": "1-1-1-1-1-1",
                                  "parentId": "1-1-1-1-1",
                                  "children": []
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
  */