首页 新闻 会员 周边 捐助

在 typescript 中如何实现树形数据结构的扁平化

0
悬赏园豆:30 [已解决问题] 解决于 2025-07-23 21:34

也就是一个将一个保存树形结构数据的数组进行 flatten 处理

在 C# 中这么实现的

public async Task<List<FlatCategoryDto>> GetFlatCategoriesAsync(int blogId, BlogCategoryType type)
{
    var flatCategories = new List<FlatCategoryDto>();
    var queue = new Queue<TreeCategoryDto>();

    var treeCategories = await GetCachedHierarchicalCategoriesAsync(blogId, type);

    foreach (var treeCategory in treeCategories)
    {
        queue.Enqueue(treeCategory);
    }

    while (queue.Count > 0)
    {
        var category = queue.Dequeue();
        flatCategories.Add(category.Adapt<FlatCategoryDto>());
        foreach (var child in category.Children)
        {
            queue.Enqueue(child as TreeCategoryDto);
        }
    }

    return flatCategories;
}

请问如何在 typescript 中进行类似的转换?

dudu的主页 dudu | 高人七级 | 园豆:24691
提问于:2025-07-23 20:55
< >
分享
最佳答案
0

在 stackblitz 上找到了实现代码 https://stackblitz.com/edit/typescript-tree-traversal?file=index.ts

/**
 * Breadth first traversal.
 */
function bfs(tree: Node) {
  const flat = [];

  const queue = [tree];
  while(queue.length > 0) {
    const cur = queue.pop();
    flat.push(cur);

    if(cur.children) {
      cur.children.forEach(child => queue.unshift(child));
    }
  }

  return flat;
}

/**
 * Depth first traversal.
 */
function dfs(tree: Node) {
  const flat = [];

  const stack = [tree];
  while(stack.length > 0) {
    const cur = stack.shift();
    flat.push(cur);

    if(cur.children) {
      cur.children.reverse().forEach(child => stack.unshift(child));
    }
  }

  return flat;
}
dudu | 高人七级 |园豆:24691 | 2025-07-23 21:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册