场景:
1、返回的菜单数据,有些不需要且有些数据为null时会产生一些bug;
2、需求不明确是几层菜单,保持代码的健壮性,保证后期突然需求变动,不用大量修改代码;
3、层级很深的按钮级别,并且处于不同的层级
解决方法:
递归函数,保证代码的健壮性。可先实现功能,后期优化。
以上三种场景,其实是一个功能模块所需要的
下面显示主要代码:
第一种,直接返回原结构数据,排除为空为null的字段
function recursiveDeleteMenuRenderFalse(data:any){
data.forEach((items:any) => {
if(!items.menuRender){
delete items.menuRender
}
for(const i in items){
// 优化判断 !items[i] || items[i] === undefined
if( items[i]==="" || items[i] === null || items[i]=== 'null' || items[i]=== undefined){
delete items[i]
}
if(items.routes?.length > 0){
recursiveDeleteMenuRenderFalse(items.routes)
}
});
return data;
}
第二种:需要拿取某一层级下的数组,层级不确定,返回的是一个数组,不是原数据
export function buttonPermission(data: any, pathname: any) {
let flag = true;
let button: string[] = [];
function loop(data:any,pathname:any){
if(flag){
data?.forEach((items: any) => {
if (items.path === pathname) {
items.routes?.map((items: any) => {
button.push(items.name);
});
flag = false;
}
if (items.routes?.length > 0) {
loop(items.routes, pathname);
}
});
}
return false
}
loop(data,pathname)
return button
}