-
期望
[ { id: "01", name: "张大大", pid: "", job: "项目经理" }, { id: "02", name: "小亮", pid: "01", job: "产品leader" }, { id: "03", name: "小丽", pid: "02", job: "产品经理" }, { id: "04", name: "大光", pid: "02", job: "产品经理" }, ] // ----------------- 转换为 ----------------------------- [ { label: '项目经理-张大大', children: [ { label: '产品leader-小亮', children: [ { label: '产品经理-小丽'}, { label: '产品经理-大光'} ]} ]} ]
-
支持
- JSON.parse 和 JSON.stringify 实现数组深拷贝
- 数组 forEach 和 push
- || 短路语句
- 引用数据类型
-
实现
function arrToTree(data) { let nData = JSON.parse(JSON.stringify(data)) // 数组深拷贝,避免影响源数据 let result = [] let map = {}; nData.forEach(item => { // 遍历数组 把每一项的引用放入map对象里 map[item.id] = item; delete item.id // id 已经保存在了map.key里 可以删掉 }); nData.forEach(item => { // 再次遍历数组 决定item的去向 let parent = map[item.pid]; // 以下为数据处理 item.label = item.job + '-' + item.name delete item.pid delete item.name delete item.job if (parent) { // 如果 map[item.pid] 有值 则 parent 为 item 的父级 // 判断 parent 里有无children 如果没有则创建 如果有则直接把 item push到children里 (parent.children || (parent.children = [])).push(item); } else { // 如果 map[item.pid] 找不到值 说明此 item 为 第一级 result.push(item); } }); return result; }
数组转换为树形结构
最新推荐文章于 2024-08-03 17:05:14 发布