SOURCE

//1.普通递归实现//1.普通递归实现
var arr=[1,2,[3,4,[5]],6]
function flatten1(arr){
    let result=[]
    for(let i=0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
            result=result.concat(flatten1(arr[i]))
        }else{
            result.push(arr[i])
        }
    }
    return result
}
let arr1=flatten1(arr)
console.log(arr1)

//2.使用reduce实现
function flatten2(arr){
    return arr.reduce((pre,cur)=>{
        return pre.concat(Array.isArray(cur)?flatten2(cur):cur)
    },[])
}
let arr2=flatten2(arr)
console.log(arr2)

//3.使用some和...展开运算符实现
function flatten3(arr){
    while(arr.some(item=>Array.isArray(item))){
        arr=[].concat(...arr)
    }
    return arr
}
let arr3=flatten3(arr)
console.log(arr3)
console.log([].concat(...arr))


//4.split和toString实现.  Array的toString方法会把数组直接打平哈哈
//但是上面两者结合数组中是字符串数字,需要将字符串数字转换成数字,所以加入的map
function flatten4(arr){
    //return arr.toString().split(',')//但是这样里面的数字是以字符串的形式存到数组中的
    return arr.toString().split(',').map(item=>item*1)
}
let arr4=flatten4(arr)
console.log(arr4)

//5.flat实现
function flatten5(arr){
    return arr.flat(Infinity)
}
let arr5=flatten5(arr)
console.log(arr5)

//使用JSON和正则实现
console 命令行工具 X clear

                    
>
console