算法

122 阅读1分钟

扁平化数据转tree

写法一:
  let arr = [
    { id: 1, name: '部门1', pid: 0 },
    { id: 2, name: '部门2', pid: 1 },
    { id: 3, name: '部门3', pid: 1 },
    { id: 6, name: '部门3', pid: 2 },
    { id: 7, name: '部门3', pid: 4 },
    { id: 8, name: '部门3', pid: 4 },
    { id: 9, name: '部门3', pid: 5 },
    { id: 10, name: '部门3', pid: 0 },
    { id: 4, name: '部门4', pid: 3 },
    { id: 5, name: '部门5', pid: 4 },
  ];
  function fn3(arr1, arr2) {
    for (let t = 0; t < arr1.length; t++) {
      for (let t2 = 0; t2 < arr2.length; t2++) {
        if (arr1[t].id == arr2[t2].pid) {
          if (!arr1[t].children) {
            arr1[t].children = [];
          }
          arr2[t2].isTreeChildren = true;
          arr1[t].children.push(arr2[t2]);
        }
      }
    }
    return fn31(arrFilter);
    function fn31(arrFilter) {
      return arrFilter.filter((v, i, arrs) => {
        if (v.isTreeChildren) {
          delete v.isTreeChildren;
          return false;
        } else {
          delete v.isTreeChildren;
          return true;
        }
      });
    }
  }
  console.log(fn3(arr, arr));


结果:

  let strJson = [
    {
      id: 1,
      name: '部门1',
      pid: 0,
      children: [
        { id: 2, name: '部门2', pid: 1, children: [{ id: 6, name: '部门3', pid: 2 }] },
        {
          id: 3,
          name: '部门3',
          pid: 1,
          children: [
            {
              id: 4,
              name: '部门4',
              pid: 3,
              children: [
                { id: 7, name: '部门3', pid: 4 },
                { id: 8, name: '部门3', pid: 4 },
                { id: 5, name: '部门5', pid: 4, children: [{ id: 9, name: '部门3', pid: 5 }] },
              ],
            },
          ],
        },
      ],
    },
    { id: 10, name: '部门3', pid: 0 },
  ];