arrayToTree(arr) {
let map = {}; // 用于存放节点对象的字典
arr.forEach((item) => {
item['children'] = []; // 初始化每个节点的子节点列表
if (!map[item.id]) {
map[item.id] = item; // 将当前节点添加到字典中
} else {
Object.assign(map[item.id], item); // 如果已经有相同ID的节点,则合并属性值
}
});
const roots = []; // 根节点集合
for (let key in map) {
const node = map[key];
if (node.pid === null || !map[node.pid]) {
roots.push(node); // 没有指定父节点或者父节点不在字典中时,认为该节点为根节点
} else {
map[node.pid].children.push(node); // 否则将其作为父节点的子节点
}
}
return roots;
}
}
js通过pid将数据处理成tree
![](https://img-home.csdnimg.cn/images/20240611030827.png)