此文件为js文件,复制直接封装组件按需导出即可
// 部门列表转为树形结构思路:
// 1.如果pid为空,说明当前部门是一级部门
// 2.如果pid不为空,判断谁的id与当前部门的pid全等,如果全等说明当前id的这个部门是pid部门的爹,要给爹这个添加孩子注意:对于树形结构的处理、常用手段就是函数的递归
// 列表转树
// list:待转换的列表
// pid:查找几级部门
export const list2Tree = (list, pid) => {
// 存储结果的树形数组
const arr = []
// 遍历list数组
list.forEach((item) => {
// 查找一级部门
if (item.pid === pid) {
// 查找二级甚至是多级部门
// 函数递归,查找item的子部门
const children = list2Tree(list, item.id)
// 如果children不为空,说明item有子部门
if (children.length) {
// 需要给item添加children属性
item.children = children
}
// 添加一级部门到结果树形数组中
arr.push(item)
}
})
// 返回结果的树形数组
return arr
}
//如果有三级即孙子级别的子属性与子属性属性名不同时,在提取子属性之前提前提取孙级属性
//points即此处的孙级属性,如果属性名不同更改即可
export const treetolist = (arr) => {
const list = []
arr.forEach((item) => {
if (item.points) {
const children = treetolist(item.points)
list.push(item, ...children)
delete item.points
} else if (item.childs) {
const children = treetolist(item.childs)
list.push(item, ...children)
delete item.childs
} else {
list.push(item)
}
})
//返回数据为普通数组
return list
}
//在子数据属性都一样时使用此函数即可
//注意函数名不要用错
export const tree2list = (arr) => {
const list = []
arr.forEach((item) => {
if (item.childs) {
const children = treetolist(item.childs)
list.push(item, ...children)
delete item.childs
} else {
list.push(item)
}
})
//返回结果为普通数组
return list
}
此文章若果对您有效还望点赞