编辑代码

const orgData = [
    { name: 'a' },
    { name: 'b' },
    { name: 'c', classFollow: 'a' },
    { name: 'd' },
    { name: 'f', classFollow: 'c' },
    { name: 'g', classFollow: 'b' },
    { name: 'h', classFollow: 'f' },
    { name: 'i', classFollow: 'c' },
    { name: 'j', classFollow: 'h' },
    { name: 'k', classFollow: 'c' }
]; 

function topologicalSort(data) {
    const graph = new Map();
    const visited = new Set();
    const result = [];

    // 构建图
    data.forEach(item => {
        if (!graph.has(item.name)) {
            graph.set(item.name, []);
        }
        if (item.classFollow) {
            if (!graph.has(item.classFollow)) {
                graph.set(item.classFollow, []);
            }
            graph.get(item.classFollow).push(item.name);
        }
    });

    // 深度优先搜索
    function dfs(node) {
        if (visited.has(node)) return;
        visited.add(node);
        console.log(111, node)
        const neighbors = graph.get(node) || [];
        result.push(node); // 插入到结果的开头
        neighbors.forEach(dfs);
    }

    // 遍历所有节点
    data.forEach(item => {
        if (!visited.has(item.name)) {
            dfs(item.name);
        }
    });

    return result;
}

console.log(topologicalSort(orgData))

// a > c > f > h > j > i > k > b > g > d