数组扁平化思考过程

本文探讨了如何通过递归实现将嵌套数组扁平化,介绍了两种方法:直接使用自身函数和递归调用子函数。第一种方法利用数组解构和拼接,第二种方法则是将循环递归逻辑封装为独立函数。这两种技巧有助于理解递归在处理复杂数据结构时的应用。
摘要由CSDN通过智能技术生成

主要是想记录一下这个递归思路。用这个数组扁平来举例。

let arr = [1, [2, 3, 3], 4, [5, 4]]; ==> 变成 [1, 2, 3, 3, 4, 5, 4]

首先想到就是循环,然后判断是不是数组,再进行递归

		function flat (arr){
            let newArr = [];
           for (let i = 0; i < arr.length; i++) {
            if(Array.isArray(arr[i])){
            	//  这里就需要再循环进行判断,但是我只想递归for循环
            	//  然后我们就有两种选择了
            	//  第一种就是用这个flat函数进行递归,但是我们并不需要let newArr = []这部分代码,所以如果使用这个方法的话需要解决这个新创建数组的问题
            	//  第二种就是再创建一个函数,想递归哪里,就把函数写成什么。              
            }else{
                 newArr.push(arr[i]);
            }
           }
            return newArr;
        }
  1. 第一种方法,用本函数进行递归,解决这个新产生的数组问题
 		function flat(arr) {
            let newArr = [];
            for(let i = 0; i < arr.length; i++){
                if(Array.isArray(arr[i])){
                    //  就是把返回数组进行解构,再进行与原来数组进行拼接。
                    //  这样就可以把递归的产生的数据拼接到最开始创建的数组了。
                    newArr = newArr.concat(...flat(arr[i]));
                }else{
                    newArr.push(arr[i]);
                }
            }
            return newArr ;
        }
  1. 第二种方法,想递归哪里,就把哪里写成函数。
    只想把for那段代码的进行递归,所以将那块代码写成函数,把需要的参数传进去就可以了
		function flat (arr){
            let newArr = [];
            judge(arr, newArr);
            return newArr;
        }

        function judge(arr, newArr){
            for (let i = 0; i < arr.length; i++) {
                if(Array.isArray(arr[i])){
                	//  这样递归的话,我们就可以不用考虑新创建的数组问题了。
                    judge(arr[i], newArr);
                }else{
                    newArr.push(arr[i]);
                }
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值