面试题:将数组转为树结构

283 阅读1分钟

将数组转为树结构

通过 id 和 parentId,将下列数组转为树结构

const arr = [
  {
    id: 2,
    name: "部门B",
    parentId: 0,
  },
  {
    id: 3,
    name: "部门C",
    parentId: 1,
  },
  {
    id: 1,
    name: "部门A",
    parentId: 2,
  },
  {
    id: 4,
    name: "部门D",
    parentId: 1,
  },
  {
    id: 5,
    name: "部门E",
    parentId: 2,
  },
  {
    id: 6,
    name: "部门F",
    parentId: 3,
  },
  {
    id: 7,
    name: "部门G",
    parentId: 2,
  },
  {
    id: 8,
    name: "部门H",
    parentId: 4,
  },
];

本题主要考察对递归算法的理解:

function transferTree(arr, parentId) {
    let node = arr.filter(item => item.parentId === parentId)
    if(!node.length) return
    node.forEach(element => {
        element.children = transferTree(arr, element.id)
    });

    return node
}

console.log(JSON.stringify(transferTree(restArr, 0)))

打印结果:
[
  {
    id: 2,
    name: "部门B",
    parentId: 0,
    children: [
      {
        id: 1,
        name: "部门A",
        parentId: 2,
        children: [
          {
            id: 3,
            name: "部门C",
            parentId: 1,
            children: [{ id: 6, name: "部门F", parentId: 3 }],
          },
          {
            id: 4,
            name: "部门D",
            parentId: 1,
            children: [{ id: 8, name: "部门H", parentId: 4 }],
          },
        ],
      },
      { id: 5, name: "部门E", parentId: 2 },
      { id: 7, name: "部门G", parentId: 2 },
    ],
  }
];

小伙伴们给个赞吧!