原始数据
let oldArr = [
{ id: '1000', pid: null, name: '西安总部' }, // 1级
{ id: '10001', pid: '1000', name: '西安雁塔分部 - 子公司' }, // 2级
{ id: '10002', pid: '1000', name: '西安莲湖分部 - 子公司' }, // 2级
{ id: '100021', pid: '10002', name: '西安莲湖分部 - 西桃园分部 - 子公司' }, // 3级
{ id: '2000', pid: null, name: '北京总部' }, // 1级
{ id: '20001', pid: '2000', name: '北京丰台分部 - 子公司' }, // 2级
{ id: '20002', pid: '2000', name: '北京朝阳分部 - 子公司' }, // 2级
{ id: '200021', pid: '20002', name: '北京朝阳分部 - 广渠路分部 - 子公司' } // 3级
]
需要转化的样子
image.png
<div>{this.gongsi()}</div>
gongsi = () => {
let oldArr = [
{ id: '1000', pid: null, name: '西安总部' }, // 1级
{ id: '10001', pid: '1000', name: '西安雁塔分部 - 子公司' }, // 2级
{ id: '10002', pid: '1000', name: '西安莲湖分部 - 子公司' }, // 2级
{ id: '100021', pid: '10002', name: '西安莲湖分部 - 西桃园分部 - 子公司' }, // 3级
{ id: '2000', pid: null, name: '北京总部' }, // 1级
{ id: '20001', pid: '2000', name: '北京丰台分部 - 子公司' }, // 2级
{ id: '20002', pid: '2000', name: '北京朝阳分部 - 子公司' }, // 2级
{ id: '200021', pid: '20002', name: '北京朝阳分部 - 广渠路分部 - 子公司' } // 3级
]
let newArr = []
this.treeS(oldArr,null,newArr)
}
treeS = (oldArr,id,newArr) => {
oldArr.forEach((i)=>{
if(i.pid == id) { newArr.push(i)}
})
console.log(newArr,'一级');
newArr.forEach((item)=> {
item.children = []
console.log(newArr,'newArr');
this.treeS(oldArr,item.id, item.children)
})
console.log(newArr,'后面级别');
}
1.第一步遍历老数组将一级节点先筛选出来得到一个新数组
2.第二步给新数组遍历加children,进行递归
(第一次调用递归函数传老数组,id为null,新数组为空)
(第二次调用递归函数传老数组,id为新数组每一个id,新数组为每一个新加的children项)
(每次递归都会判断当前传入的id是不是和他上一级id一致,是就push进他传入的新数组)
网友评论