SOURCE

// 主要的思路
// 1. 遍历数组
// 2. 判断元素是否是数组
// 3. 将数组的每一层都展开

let arr = [1, 2, 3, 4, [1, 2, 3, [1, 2, 3, [1, 2, 3]]], 5, "string", { name: "弹铁蛋同学" }]

// 方法一:递归
function flatten(arr) {
    let res = []
    for(let val of arr) {
        if(val instanceof Array) {
            res = res.concat(flatten(val))
        } else {
            res.push(val)
        }
    }
    return res
}
console.log(flatten(arr))

// 方法二:reduce + concat + 递归
function flatten1(arr) {
    let result = []
    return arr.reduce((pre, cur) => {
        return pre.concat(Array.isArray(cur) ? flatten1(cur) : cur)
    }, [])
}
console.log(flatten1(arr))

// 方法三: flat
const result = arr.flat(Infinity)
console.log(result)

// 方法四:toStri
const string = arr.toString().split(',').map(item => {
    return parseInt(item)
})
console.log(string)

// 方法五:指定深度的扁平化

function flatten5(arr, dep, result = []) {
    if(arr.length == 0) return []
    for(let val of arr) {
        if(dep > 0 && Array.isArray(val)) {
            if(dep >= 1) {
                flatten5(val, dep - 1, result)
            } else {
                result.push(val)
            }
        } else {
            result[result.length] = val
        }
    }
    return result
}
console.log(flatten5(arr, 3))
console 命令行工具 X clear

                    
>
console