类别:js / 日期:2023-05-10 / 浏览:293 / 评论:0

以下数据结构中,id 代表部门编号,name 是部门名称,parentId 是父部门编号,为 0 代表一级部门,现在要求实现一个 convert 方法,把原始 list 转换成树形结构,parentId 为多少就挂载在该 id 的属性 children 数组下,结构如下:

// 原始 list 如下
let list = [
  { id: 1, name: "部门 A", parentId: 0 },
  { id: 2, name: "部门 B", parentId: 0 },
  { id: 3, name: "部门 C", parentId: 1 },
  { 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 },
];
const result = convert(list);
// 转换后的结果如下

let result = [
  {
    id: 1,
    name: "部门 A",
    parentId: 0,
    children: [
      {
        id: 3,
        name: "部门 C",
        parentId: 1,
        children: [
          {
            id: 6,
            name: "部门 F",
            parentId: 3,
          },
          {
            id: 16,
            name: "部门 L",
            parentId: 3,
          },
        ],
      },
      {
        id: 4,
        name: "部门 D",
        parentId: 1,
        children: [
          {
            id: 8,
            name: "部门 H",
            parentId: 4,
          },
        ],
      },
    ],
  },
];

答:
function convert(list) {
  const res = [];
  const map = list.reduce((res, v) => ((res[v.id] = v), res), {});
  for (const item of list) {
    if (item.parentId === 0) {
      res.push(item);
      Continue;
    }
    if (item.parentId in map) {
      const parent = map[item.parentId];
      parent.children = parent.children || [];
      parent.children.push(item);
    }
  }
  return res;
}



版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。

«    2023年11月    »
12345
6789101112
13141516171819
20212223242526
27282930

最新留言