一、需求原因
平时前端开发有转化平行的树状数据为树状数据的需求,并且从某个节点过滤到当前节点和子节点的树状数据需求,于是便产生以下算法
/**
* @description 按照当前人员所在的部门为根节点将平行数据处理成树状数据
* @param items {Array} 一组平行的树状数据,例如[{parentId:1,id:11,label:'xxx'},{id:1,label:'xxx'},{parentId:11,id:111,label:'xxxx'}]
*/
function arrayTransToTree(items) {
const result = []; // 存放结果集
const itemMap = {}; //
for (const item of items) {
const id = item.id;
const pid = item.pid;
if (!itemMap[id]) {
itemMap[id] = {
children: [],
}
}
itemMap[id] = {
...item,
children: itemMap[id]['children']
}
const treeItem = itemMap[id];
if (pid === 0) {
result.push(treeItem);
} else {
if (!itemMap[pid]) {
itemMap[pid] = {
children: [],
}
}
itemMap[pid].children.push(treeItem)
}
}
return result;
}
志在帮助部分深夜还在开发的前端,后台没有时间组装树状数据的情况下,以方便查阅完成需求,不喜勿喷哈。