数组扁平化处理办法

首先需要了解什么是数组扁平化?
数组扁平化是指将一个多维数组变为一维数组。

        // 要求实现:
        // let givenArr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
        // let outputArr = [1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10]
        // 实现flatten方法使得
        // flatten(givenArr)——>outputArr

相关解决办法:

  1. 方法一:reduce方法
    思想:遍历数组每一项,若值为数组则递归遍历,否则concat
let givenArr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
        function flatten (arr) {
            return arr.reduce((result, item) => {
                return result.concat(Array.isArray(item) ? flatten(item) : item)
            }, [])
        }
        console.log(flatten(givenArr))
  1. 方法二:toString & split方法 思想:调用数组的toString方法,将数组变为字符串然后再用split分割还原为数组
let givenArr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
        function flatten (arr) {
            return arr.toString().split(',').map((item) => {
                return Number(item)
            })
        }
        console.log(flatten(givenArr))
  1. 方法三:join & split 思想:和上面的toString一样,join也可以将数组转换为字符串
let givenArr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
        function flatten(arr) {
            return arr.join(',').split(',').map((item) => {
                return parseInt(item);
            })
        }
        console.log(flatten(givenArr))
  1. 方法四:递归 思想:递归的遍历每一项,若为数组则继续遍历,否则concat
let givenArr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
        function flatten (arr) {
            let res = []
            arr.map((item) => {
                if (Array.isArray(item)) {
                    res = res.concat(flatten(item))
                } else {
                    res.push(item)
                }
            })
            return res
        }
        console.log(flatten(givenArr))
  1. 方法五:扩展运算符 思想:es6的扩展运算符能将二维数组变为一维,如:[].concat(...[1, 2, 3, [4, 5]]); // [1, 2, 3, 4, 5]
let givenArr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
        function flatten(arr) {
            while(arr.some(item => Array.isArray(item))) {
                arr = [].concat(...arr);
            }
            return arr;
        }
        console.log(flatten(givenArr))

参考链接1:https://juejin.im/post/5adc8e396fb9a07aa0479725
参考链接2:https://juejin.im/post/5ca97d4b6fb9a05e2a302804