数组的扁平化

50 阅读1分钟

数组的扁平化就是将一个 "多维数组" 转化成一个 "一维数组"

        const arr = [1, 2, 3, 4, { name: '张三' }, [5, 6, 7, 8, { name: '李四' }, [9, 10, 11, 12, { name: '王五' }]]]

        // 1. 面试版
        // 该函数 接收一个 参数, 也就是 你要实现扁平化的一个数组
        function flat(origin) {
            // 1. 创建一个空数组, 用来接收扁平化以后的元素内容
            const newArr = []

            // 2. 利用递归函数, 实现数组的扁平化
            function fn(fnOrigin) {
                fnOrigin.forEach((item) => {
                    if (Object.prototype.toString.call(item) === '[object Array]') {
                        // 说明当前 item 是一个数组, 所此时需要递归调用 fn 函数
                        fn(item)
                    } else {
                        // 如果当前分支执行, 说明 item 一定不是一个数组
                        newArr.push(item)
                    }
                })
            }
            fn(origin)

            // 3. 把处理好的数组(newArr) 返回出去
            return newArr
        }

        const flatArr = flat(arr)
        console.log(flatArr)

        // 2. 工作版(一行搞定)  Infinity 无穷
         console.log(arr)
         console.log(arr.flat(1))
         console.log(arr.flat(2))
         console.log(arr.flat(Infinity))