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))