Js数组拍平的常见方法

需要拍平的数组

var arr = [1,2,[3,4,[5]]]

ES6 flat

// flat 默认一层,需要使用Infinity参数
var flat1 = arr.flat(Infinity)

递归

function fn1(arr){
    // 或者使用instaceof
    if(!Array.isArray(arr)) return;
    let arr1 = []
    arr.forEach((item) => {
        if(Array.isArray(item)){
            // arr1.push(...fn1(item))
            arr1 = arr1.concat(fn1(item))
        }else{
            arr1.push(item)
        }
    })
    return arr1
}
var flat2 = fn1(arr)

reduce

function fn2(arr){
    if(Object.prototype.toString.call(arr) != "[object Array]"){return false};
    return arr.reduce((pre,cur) => pre.concat(Array.isArray(cur)?fn2(cur):cur),[])
}
var flat3 = fn2(arr)

toString + split,数组元素限制为纯字符串、纯数字

var flat4 = arr.toString().split(',').map(item => +item)

join+split

var flat5 = arr.join().split('')