递归处理每一级
这是我个人总结出来的一种比较直观的递归方式,源于路由鉴权。
原本是使用vue代码实现的,这里以js代码举例
js
// 要处理的数据
data = [
{name:'a', show:true, children: [
{name: 'b', show: true},
{name: 'c', show: false},
{name: 'd', show: false, children: [
{name: 'e', show: true}
]
}
]
},
{name: 'g', show: true }
];
// 递归模板
function recursionTemplate(data,callback=()=>{}){
data = callback(data);
data.forEach(e => {
if(e.children){
e.children = recursionTemplate(e.children,() => callback(e.children));
}
return e
});
return data;
};
// 处理规则
function recursionRule(data){
data = data.filter(e => {
// 剔除show字段为false的路由
if(e.show === false){
return false;
}
// 如果有e.children且e.children是只有唯一一个值的数组,则删除他。
if(e.children && e.children[1] == undefined){
delete e.children;
}
return true;
});
return data;
};
// 调用,使得data中属性show为false的剔除,且只有一个children时删除children属性。
recursionTemplate(data,(data) => recursionRule(data));使用这种方法写好递归的规则后只需要关心处理的规则即可,方便调试便于理解。