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; } }