let treeList = [
  {
    title: 'Node 1',
    key: '0-0',
    children: [
      {
        title: 'Child Node 1-1',
        key: '0-0-0',
        children: [
          {
            title: 'Grandchild Node 1-1-1',
            key: '0-0-0-0',
          },
          {
            title: 'Grandchild Node 1-1-2',
            key: '0-0-0-1',
          },
        ],
      },
      {
        title: 'Child Node 1-2',
        key: '0-0-1',
      },
    ],
  },
  {
    title: 'Node 2',
    key: '0-1',
    children: [
      {
        title: 'Child Node 2-1',
        key: '0-1-0',
      },
    ],
  },
  {
    title: 'Node 3',
    key: '0-2',
  },
];
let requestData =  [
  
  {
      "id": 101,
      "name": "深圳总公司",
      "parentId": 100
  },
  {
      "id": 103,
      "name": "研发部门",
      "parentId": 101
  },
  {
      "id": 108,
      "name": "市场部门",
      "parentId": 102
  },{
    "id": 100,
    "name": "小星星集团有限公司",
    "parentId": 0
},
  {
      "id": 102,
      "name": "长沙分公司",
      "parentId": 100
  },
  {
      "id": 104,
      "name": "市场部门",
      "parentId": 101
  },
  {
      "id": 109,
      "name": "财务部门",
      "parentId": 102
  },
  {
      "id": 105,
      "name": "测试部门",
      "parentId": 101
  },
  {
      "id": 106,
      "name": "财务部门",
      "parentId": 101
  },
  {
      "id": 107,
      "name": "运维部门",
      "parentId": 101
  }
]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.

为了将requestData转换为treeList格式的数据,我们需要遍历requestData并构建一个树形结构。这里的关键在于识别每个节点的父节点,并将其作为子节点添加到相应的父节点下。

下面是一个简单的实现方法:

  1. 创建一个映射表:首先基于requestData创建一个映射表,键是id,值是对应的对象。
  2. 构建树形结构:然后遍历映射表中的所有条目,如果某个条目的parentId0(根节点),则直接加入到最终的树数组中;如果不是根节点,则找到其父节点,并将其作为子节点添加到父节点下。
function transformData(requestData) {
  // 创建一个映射表
  const idMap = new Map();
  requestData.forEach(item => {
    idMap.set(item.id, {
      ...item,
      children: []
    });
  });

  // 构建树形结构
  const treeList = [];
  idMap.forEach(item => {
    if (item.parentId === 0) {
      treeList.push(item);
    } else {
      const parent = idMap.get(item.parentId);
      if (parent) {
        parent.children.push(item);
      }
    }
  });

  return treeList;
}

// 使用这个函数来转换数据
const transformedTreeList = transformData(requestData);

// 更新state
useEffect(() => {
  setTreeData(transformedTreeList);
}, []);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.

parenttreeList的关联方式

  • parent是通过idMap查找得到的,它代表某个节点的父节点。
  • 当一个节点被添加到parent.children数组中时,实际上是将它添加到了它所属的父节点的子节点列表中。
  • 所有的根节点都会直接添加到treeList数组中,而这些根节点的children数组中会包含它们各自的子节点。

总结

通过上述过程,parenttreeList之间的关联是通过构建树形结构实现的:

  • 根节点直接添加到treeList中。
  • 非根节点通过parent.children.push(item);的方式添加到它们各自的父节点的子节点列表中。
  • 最终,treeList数组包含了所有根节点及其子节点组成的完整树形结构。