通过递归方法更改对象中的属性值

需求:递归一个对象,我们更改其type全部为5;

	我们首先思考如果用每一层的循环我们怎么取解决?
	 var data = [
            {
                label: '一级 1',
                type: 1,
                children: [{
                    label: '二级 1-1',
                    type: 1,
                    children: [{
                        type: 1,
                        label: '三级 1-1-1'
                    }]
                }]
            },
            {
                label: '一级 2',
                type: 1,
                children: [
                    {
                        label: '二级 2-1',
                        type: 1,
                        children: [{
                            type: 1,
                            label: '三级 2-1-1'
                        }]
                    },
                    {
                        type: 1,
                        label: '二级 2-2',
                        children: [{
                            type: 1,
                            label: '三级 2-2-1'
                        }]
                    }]
            }
        ]
    function gai(arr){
        arr.forEach(function(val,i){
            val.type = 5
            val.children.forEach(function(val,i){
                val.type = 5
                val.children.forEach(function(val,i){
                val.type = 5
            })
            })
        })
        console.log(arr)
    }
    gai(data)
    
 //当然如果这个JSON数组再往下边深入怎么办,所以用每一层循环的方式又是分厂笨重,那么我们需要用递归的方法,因为我们发现每一层的代码基本上一样子,至少每一层都有type和children属性
 function gai1(n){
 	//首先我们发现这个json对象先是一个数组所以先forEach();遍历出来所有的元素,当然用every()
 	//map()也行
        n.forEach(item=>{
        //for in s所有的属性
            for(let k in item){
            //如果属性值为type时候我们就可以用item[k]赋值2
                if (k == "type") {
                    item[k] = 5;
                }
             //如果属性值为children时候我们就可以再继续用此函数
             //当然赋参数时候赋的是item此时键为k的值,相当于一个json数组
                if (k == "children") {
                    gai1(item[k])
                }
            }
        })
        return n
    }
    console.log(gai1(data));
    
    //第一步是声明一个形参f 
    function ss(f){
    //第二步骤是条件语句
            if (f<10) {
            	//第三步打印所需要的内容
                //打印一定要再回调之前,这样才会出现起始的情况
                console.log(f)
                //打印完了之后再回调并且当前值+1
                ss(f+1);
            }
        }
        ss(0)
        
        
        
//这里我们需要注意另外一个:看看下边的语句如何运行
function ss(f){
    //第二步骤是条件语句
            if (f<10) {
            	
                //第三步回调当前值+1
                ss(f+1);
                
                //第四步打印所需要的内容
                
                console.log(f)
                //10,9,8......0
            }
        }
        ss(0)
        
        这里我们要知道如果走到第三步的时候直接回调了函数,当前的log(f)值没有走留了下来,接着下来再走一下函数,发现留了多个log,所以会出现10,9,8,7,6,5...0

注明:使用递归让获取更加的简单

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值