Skip to content

递归处理每一级

这是我个人总结出来的一种比较直观的递归方式,源于路由鉴权。

原本是使用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));

使用这种方法写好递归的规则后只需要关心处理的规则即可,方便调试便于理解。

鄂ICP备19018246号-1