1.
// 将平级数据根据pid转化为树形结构数据
treeData(data) {
let cloneData = JSON.parse(JSON.stringify(data)); // 对源数据深度克隆
let tree = cloneData.filter((father) => {
//循环所有项
let branchArr = cloneData.filter((child) => {
return father.id == child.pId; //返回每一项的子级数组
});
if (branchArr.length > 0) {
father.children = branchArr; //如果存在子级,则给父级添加一个children属性,并赋值
}
return father.pId == 0; //返回第一层
});
return tree; //返回树形数据
},
2.
arrayToTree1(arr) {
const map = {};
const result = [];
// 将数组转换为以id为键的对象
arr.forEach((item) => {
map[item.id] = item;
});
// 遍历数组,找到所有父id为根节点的记录
arr.forEach((item) => {
if (item.pid == 0) {
// 将找到的记录作为子节点添加到对应的父节点下
if (!result[item.pid]) {
result[item.pid] = [];
}
result[item.pid].push(item);
} else {
// 递归处理剩余的记录
const parent = map[item.pid];
if (parent) {
if (!parent.children) {
parent.children = [];
}
parent.children.push(item);
}
}
});
return result;
},
3.
arrayToTree(arr, pid = 0) {
const tree = {};
arr.forEach((item) => {
if (item.pid === pid) {
tree[item.id] = item;
const children = this.arrayToTree(arr, item.id);
if (children.length) {
tree[item.id].children = children;
}
}
});
return tree;
},