数组扁平化的方法

61 阅读2分钟

数组的扁平化

  • 数组的扁平化: 即将多维数组经过代码实现后 变为一维数组

  • 回调函数实现

        const arr = [1,2,3,[4,5,[6,7,[8,9]]]];
        console.log('原型:', arr);
        function fun(origin){
            // 定义一个空数组  用于存储扁平化后的数组
            let newArr = [];
            // 数组吧扁平化的核心函数
            function dun(origins){
                // 通过循环遍历拿到所有数据
                origins.forEach(function(item){
                    // 判断当前遍历到的数据是否为数组
                    if(Object.prototype.toString.call(item) === '[object Array]'){
                        // 再次调用 dun() 函数
                        dun(item);
                    }else{
                        // 如果不是数组 直接新增到 数组
                        newArr.push(item);
                    }
                })
            }
            // 调用内部函数
            dun(origin);
            // 将新数组返回
            return newArr;
        }
        // 接收 函数调用的值
        const res = fun(arr);

        console.log('扁平化后的数组:', res);

image.png

  • 普通递归实现

    通过for循环遍历到数组的每一个数据,并判断当前数据是否为数组,如果为数组,就将里面的数据逐一拼接到新数组中,如果不是数组,就新增到新数组末尾

        let arr = [1,2,3,[4,5,[6,7,[8,9]]]];
        function fun(arr){
            let newArr = [];  // 定义一个空数组,用于存储扁平化后的数组
            // 通过循环遍历数组中每一个数据
            for(let i = 0; i < arr.length; i++){
                // 判断当前数据是否为数组
                if(Array.isArray(arr[i])){
                    // console.log(1);
                    // 如果是数组 就将当前数组拼接到数组中
                    newArr = newArr.concat(fun(arr[i])); 
                }else{
                    // 如果不是数组  新增到末尾
                    newArr.push(arr[i]);
                }
            }
            return newArr;  // 将扁平化后的新数组返回

        }
        let res = fun(arr);  // res 接收函数
        console.log('原数组:',arr);
        console.log('扁平化后的数组:',res);
  • 通过reduce数组遍历实现

    通过reduce 遍历拿到所有arr中 的数据, 将其作为返回值返回 ,reduce 的第一个参数用来接收拼接后的值 而第二个参数是当前遍历的数据 通过 三元运算符 判断 当前遍历的是否为数组 ,如果是数组 就再次调用函数, 如果不是数组,则直接拼接到prev中

        let arr = [1,2,3,[4,5,[6,7,[8,9]]]];

        function fun(arr){
            return arr.reduce(function(prev,arr1){
                return prev.concat(Array.isArray(arr1)? fun(arr1) : arr1);
            },[])
        }
        let res = fun(arr);
        console.log(res);
  • 数组扁平化的方法
    1. flat() 数组给我们提供的扁平化的方法,需要接受一个 参数, 代表 拆 几层, 默认不传递为 1
    2. Infinity: 在 JS 中代表 正无穷,-Infinity: 负无穷
let arr = [1,2,3,[4,5,[6,7,[8,9]]]];
console.log('原型:', arr);
const newArr = arr.flat(Infinity);
console.log('扁平化后的数组:', newArr );

image.png