以下代码是根据 deptId
和 parentId
属性将给定的 data
数组转换成树形结构,并输出转换后的结果和原始的 data
数组。
-
数据定义:
const data = [ { "deptId": 4145, "parentId": 0, "deptName": "测试", }, { "deptId": 4146, "parentId": 0, "deptName": "测试部门men", }, { "deptId": 4147, "parentId": 0, "deptName": "测试部门menmen", }, { "deptId": 4148, "parentId": 4145, "deptName": "测试部门-1", }, { "deptId": 4149, "parentId": 4145, "deptName": "测试部门-2", }, { "deptId": 4150, "parentId": 4147, "deptName": "测试部门menmen-1", }, { "deptId": 4151, "parentId": 4150, "deptName": "测试部门menmen-1-1", }, ];
这里定义了一个包含部门信息的数组
data
,每个部门用对象表示,包括deptId
(部门ID)、parentId
(父部门ID)、deptName
(部门名称)等属性。 -
创建映射:
const map = {}; data.forEach((item) => { map[item['deptId']] = item; });
这段代码创建了一个
map
对象,将每个部门对象item
以deptId
作为键存储在map
中。这样可以通过部门ID快速查找部门对象。 -
构建树形结构:
const list = []; data.forEach((item) => { const parent = map[item['parentId']]; if (parent) { parent.children = parent.children || []; parent.children.push(item); } else { list.push(item); } });
- 遍历
data
数组中的每个部门对象item
。 - 对于每个
item
,通过map
对象找到其父部门对象parent
。 - 如果找到了父部门 (
parent
存在),则将当前部门item
添加到父部门的children
属性数组中。 - 如果没有找到父部门 (
parent
不存在,即parentId
为0或未匹配到有效部门ID),则将当前部门item
添加到list
数组中,表示顶层部门或无父部门的部门。
- 遍历
-
输出结果:
console.log('list', list); console.log('data', data);
list
数组包含顶层部门或无父部门的部门对象,即树的根节点数组。data
数组仍然保留原始顺序和结构,但在遍历和操作过程中已经添加了children
属性。
总结:
这段代码的主要目的是将扁平的部门数据 data
转换为带有层级关系的树形结构,并在输出时展示树的顶层结构和操作后的完整部门数据。