将list列表封装成tree结构
export const turnToTree = data => {
var temp = {};
var treeData = [];
for (let i = 0; i < data.length; i++) {
temp[data[i].id] = data[i];
}
for (let i in temp) {
if (!!temp[i].pid && temp[i].pid !== '无' && temp[i].pid !== 'undefined' && temp[temp[i].pid]) {
if (!temp[temp[i].pid].children) {
temp[temp[i].pid].children = [];
}
temp[temp[i].pid].children.push(temp[i]);
temp[temp[i].pid].children.sort((a, b) => {
return a.orderNum - b.orderNum
})
} else {
treeData.push(temp[i]);
treeData.sort((a, b) => {
return a.orderNum - b.orderNum
})
}
}
return treeData
}
data的数据结构:
通过节点id查找对应name
export const getToName = (list, id, fn) => {
if (!list && list.length <= 0) return;
list.map((t) => {
if (t.id === id) {
fn(t.name);
} else if (t.children && t.children.length > 0) {
getToName(t.children, id, fn)
}
})
}
通过子节点id查找父级id集合
export const getToPath = (list, id) => {
let arr = [];//定义一个空数组
if (!list && list.length <= 0) return;
fun(list); //调用封装好的回显函数
let out = false;//定义一个标识(是否找到对应的id)
function fun(childrenArr) { //封装的回显函数
let bg = 0; //定义一个标杆(标识循环到当前数组的第几条)
for (let item of childrenArr) {
if (item.id === id) {//判断所在数组(层级),是否有与之匹配的id
arr.push(item.id);//存在则返回其id
out = true;//存在就将标识设置为true
return;//递归出口(出口1)
} else if (//判断id不匹配的层级是否具有下级目录(children)
item.children && item.children.length > 0
) {
arr.push(item.id);
fun(item.children);//存在下级目录就将下一级目录回调
}
bg++;
if (out) return//如果找到对应的id 就执行返回 (出口2)
if (bg === childrenArr.length && arr && arr.length > 0) {
arr.pop();//如果在最后一个数组对象都没有找到对应ID 那么就删除最后一项
}
}
}
return arr
}
//输入: id = 9f18f4d7-0776-4cd3-af9c-d36e82a19ea0
//输出: ["大坝", "应变及温度", "钢板计(应变计)"]
list的数据结构: