js中的递归初用以及本周遇到的node的版本问题

本文介绍了一种使用递归函数来遍历和处理多层嵌套对象的方法,并提供了两种不同的实现方式。一种是通过for...in循环进行遍历,另一种是使用if条件判断进行递归。

本周开发中用到了一个递归,用来获取多层嵌套对象。现整理一下。

// data
recursionData: {
                    name: "小明",
                    children: {
                        name: "小红",
                        relation: "情侣",
                        children: {
                            name: "小蓝",
                            relation: "同学",
                            children: {
                                name: "小绿",
                                relation: "同学"
                            }
                            //......更多的对象
                        }
                    }
                }
demoFunc() {
                let arr = []
                // 定义递归函数 里面的参数datas就是我们每次调用要处理的对象
                function rabbit(datas) {
                    // 使用for in遍历对象
                    for (let key in datas) {
                        // 如果它里面的children还是对象的话,就再调用一次这个函数
                        if (typeof datas.children == "object") {
                            // 递归,这里的调用传入的参数都是每一层的children对象
                            rabbit(datas.children);
                        }
                        arr.push({
                            name: datas.name
                        });
                        // 跳出循环,避免重复push
                        break;
                    }
                }
                rabbit(this.recursionData);    //首次执行该递归方法,传入需要递归的数据
                console.log(arr,'---arr')
            }

结果:

除了用for in遍历对象,还可以用if作为判断条件

demoFunc() {
                let arr = []
                // 定义递归函数 里面的参数datas就是我们每次调用要处理的对象
                function rabbit(datas) {
                    //判断datas是否存在children,有则再次执行,并返回当前name
                    if(datas.children) {
                        rabbit(datas.children);
                        arr.push({
                            name: datas.name
                        });
                    }else {
                        arr.push({
                            name: datas.name
                        });
                    }
                }
                rabbit(this.recursionData);    //这很重要!!!
                console.log(arr,'---arr')
            }

结果:

  • node版本问题

项目需用npm装插件,由于node版本过高的原因,报错。然后捣鼓了半天,才在mac上把版本降下来。用sudo n 版本号,这个没有问题,但要先断开brew对node的链接。

node降到16.15.1后,再运行,还是报错。

然后想了想,是不是npm装不上去,用了yarn,好了,装上去了。然后npm运行,报错

继续搜,删了node_modules ,执行npm install --save core-js和npm install 都不行。换用yarn install也不行。

然后又搜,搞半天,根据报错,可能是less或者less-loader版本过高的问题

执行以下命令

npm install less less-loader --save-dev --force

没报错。最后可以运行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值