也就是一个将一个保存树形结构数据的数组进行 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 中进行类似的转换?
在 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;
}