// 定义原始数据
const data = [
{ id: 1, parentId: null, name: 'Node A', level: 0 },
{ id: 2, parentId: 1, name: 'Node B', level: 1 },
{ id: 3, parentId: 1, name: 'Node C', level: 1 },
{ id: 4, parentId: 2, name: 'Node D', level: 2 }
];
function buildTree(data) {
// 首先,我们创建一个映射(map),用于通过 id 快速查找节点
const nodeMap = new Map();
data.forEach(node => {
nodeMap.set(node.id, { ...node, children: [] }); // 初始化 children 数组
});
// 遍历每个节点,并根据 parentId 将其添加到父节点的 children 数组中
data.forEach(node => {
const parentNode = nodeMap.get(node.parentId);
if (parentNode) {
parentNode.children.push(nodeMap.get(node.id));
}
});
// 从映射中提取根节点(parentId 为 null 的节点)
const roots = [];
nodeMap.forEach(node => {
if (!node.parentId) {
roots.push(node);
}
});
return roots;
}
// 使用函数构建树形数据结构
const treeData = buildTree(data);
console.log(treeData);
console