js多维数组降成一维数组

第一种方法:使用join方法加split方法

 //第一种方法:使用join方法将数组降维成一维字符串,然后使用split方法转为数组
        let arr = [1, [2, 3, [7, 8, 9]],
            [4, 5, [10, 11, 12, [13, 14, 15]], 6]
        ];
        let arrjoin = arr.join().split(',');
        console.log(arrjoin) //['1', '2', '3', '7', '8', '9', '4', '5', '10', '11', '12', '13', '14', '15', '6']

第二种方法:使用递归

let arr2 = [1, [2, 3, [7, 8, 9]],
            [4, 5, [10, 11, 12, [13, 14, 15]], 6]
        ];
        //创建一个新数组用于保存降维后的新数组
        let newArr = [];
        // 创建一个toArr函数
        let toArr = (arr2) => {
            // 遍历参数arr
            for (let i = 0; i < arr2.length; i++) {
                // 判断这个参数是不是数组,是数组重新调用toArr函数,进行递归,非数组参数直接添加到新数组中
                if (arr2[i] instanceof Array) {
                    toArr(arr2[i]);
                } else {
                    newArr.push(arr2[i]);
                }
            }
        }
        toArr(arr2);
        console.log(newArr);//['1', '2', '3', '7', '8', '9', '4', '5', '10', '11', '12', '13', '14', '15', '6']

第三种方法:使用数组的flat方法

// Array.flat() 接收数字参数, 默认是1, 也就是降一个数组, 取值为Infinity表示直接降维成一维数组
        let arr3 = [
            1, [2, 3, [7, 8, 9]],
            [4, 5, [10, 11, 12, [13, 14, 15]], 6]
        ];
        let arr4 = [1, 2, [3, 4, [5]]];
        console.log(arr4.flat());  //[1, 2, 3, 4,[5]]
        console.log(arr3.flat(Infinity)) // [1, 2, 3, 7, 8, 9, 4, 5, 10, 11, 12, 13, 14, 15, 6]
            //使用flat方法清除数组中的空元素
        let arr5 = [1, 2, 3, , 5];
        console.log(arr5.flat()); //[1, 2, 3, 5]

第四种方法:使用reduce()方法+递归

//思路:利用reduce累加规则,判断数组元素每一项是否为数组,如果是,那进行函数递归,直到遍历到数组最后一项,然后将累加值返回
        let num = [1, [2, 3, [4, 5]], 6];

        function flatten(arr) {
            return arr.reduce((pre, ele) => {
                return pre.concat(Array.isArray(ele) ? flatten(ele) : ele);
            }, []);
        }
        console.log(flatten(num)); //[1, 2, 3, 4, 5, 6]

第五种方法:使用展开运算符 + some + concat

思路:通过每一次对数组的展开然后使用循环再遍历这个数组判断数组中是否还内嵌数组,如果还有那么将进入循环展开此数组,使用concat拼接返回

function flatten2(arr) {

            let result = [...arr];
            while (result.some(item => Array.isArray(item))) {
                result = [].concat(...result);
            }
            return result;
        }
        let res2 = flatten2(arr);
        console.log(res2); //[1, 2, 3, 4, 5, 6, 7]
posted @ 2021-11-30 20:18  QTDD  阅读(428)  评论(0)    收藏  举报