将扁平结构转换为树形结构:JS和TS实现
将扁平结构转换为树形结构
在前端开发的过程中免不了要处理各种展示树结构的场景,后端往往是返回一整个列表让前自己处理,这里我基于 JS 和 TS 分别实现了此功能
JavaScript
const sourceList = [
{ id: 1, name: 'A', parent_id: null },
{ id: 2, name: 'B', parent_id: 1 },
{ id: 3, name: 'C', parent_id: 1 },
{ id: 4, name: 'D', parent_id: 2 },
{ id: 5, name: 'E', parent_id: 2 },
{ id: 6, name: 'F', parent_id: 3 },
];
function buildTree(sourceList, parent_id = null) {
const treeList = [];
for (const item of sourceList) {
if (parent_id === item.parent_id) {
const childNode = { ...item };
const childrenNodes = buildTree(sourceList, item.id);
if (childrenNodes.length > 0) {
childNode.children = childrenNodes;
}
treeList.push(childNode);
}
}
return treeList;
}
const tree = buildTree(sourceList);
console.log(tree);
TypeScript
interface Node {
id: number;
name: string;
parent_id: number | null;
children?: Node[];
}
const sourceList: Node[] = [
{ id: 1, name: 'A', parent_id: null },
{ id: 2, name: 'B', parent_id: 1 },
{ id: 3, name: 'C', parent_id: 1 },
{ id: 4, name: 'D', parent_id: 2 },
{ id: 5, name: 'E', parent_id: 2 },
{ id: 6, name: 'F', parent_id: 3 },
];
function buildTree(sourceList: Node[], parent_id: number | null = null): Node[] {
const treeList: Node[] = [];
for (const item of sourceList) {
if (parent_id === item.parent_id) {
const childNode: Node = { ...item };
const childrenNodes = buildTree(sourceList, item.id);
if (childrenNodes.length > 0) {
childNode.children = childrenNodes;
}
treeList.push(childNode);
}
}
return treeList;
}
const tree = buildTree(sourceList);
console.log(tree);
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Tioit Wang
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果