function buildMenuTree(flatMenu, paramsId) {
//第一种方法---递归解决
let resultTreeMenu = [];
flatMenu.forEach((item) => {
if (item.parentId === paramsId) {
const children = buildMenuTree(flatMenu, item.id);
resultTreeMenu.push({ ...item, children });
}
});
return resultTreeMenu;
//第二种方法---时间复杂度优化
const menuMap = {};
const rootMenu = [];
for (const item of flatMenu) {
const { id, parentId } = item;
menuMap[id] = { ...item };
if (parentId === 0) {
rootMenu.push(menuMap[id]);
} else {
menuMap[parentId].children.push(menuMap[id]);
}
}
return rootMenu;
}
// 扁平数组菜单
const flatMenu = [
{ id: 1, name: "菜单", parentId: 0, children: [] },
{ id: 2, name: "子菜单1", parentId: 1, children: [] },
{ id: 3, name: "子菜单1", parentId: 1, children: [] },
{ id: 4, name: "子子菜单2", parentId: 2, children: [] },
{ id: 5, name: "子子菜单2", parentId: 2, children: [] },
{ id: 6, name: "子子子菜单3", parentId: 3, children: [] },
{ id: 6, name: "子子子菜单5", parentId: 5, children: [] },
];
// 递归形式构建树型菜单
console.log(buildMenuTree(flatMenu, 0));
将扁平的菜单树型化
最新推荐文章于 2024-06-19 14:45:15 发布