SOURCE

// 定义原始数据
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 命令行工具 X clear

                    
>
console