数组扁平化

170 阅读1分钟

法1、 Array.prototype.flat()

let arr = [12,79,[54,11]]
console.log(arr.flat())//[12,79,54,11]
let arr = [22,[87,34,[99,12,60]]]
let arr1 = arr.flat()
console.log(arr1)//[22,87,34,[99,12,60]]
let arr2 = arr1.flat()
console.log(arr2)//[22,87,34,99,12,60]
let arr = [22, [87, 34, [99, 12, 60]]]
let arr1 = arr.flat(2)
console.log(arr1) //[22,87,34,99,12,60]
let arr = [2, [8, [1, 23, [2, 56, 1]]]]
let res = arr.flat(Infinity)
console.log(res) // [2,8,1,23,2,56,1]
console.log([...new Set(res)]) // [2,8,1,23,2,56]

法2、数组字符串化 split()

let arr = [12, 79, [54, 11, [90, 12]]]
arr += ''
console.log(arr)//12,79,54,11,90,12
arr = arr.split(',')
console.log(arr)//['12','79','54','11','90','12']
let arr1 = [12, 79, [54, 11, [90, 12]]]
let arr2 = String(arr1).split(',')
console.log(arr2) // ['12','79','54','11','90','12']
console.log(arr2.map(Number)) //[12,79,54,11,90,12]

法3、递归

let reduceDimension = (arr) => {
    let resultArr = []
    let toArr = (arr) => {
        arr.forEach(item => {
            item instanceof Array ? toArr(item) : resultArr.push(item)
        })
    }
    toArr(arr)
    return resultArr
}

let arr = [22, [87, 34, [99, 12, 60]]]
console.log(reduceDimension(arr))//[22,87,34,99,12,60]

法4、reduce+concat+递归

let arr = [22, [87, 34, [99, 12, 60]]]
let flattenDeep = (arr) => {
    return arr.reduce((acc, val) => {
        return Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val)
    }, [])
}
console.log(flattenDeep(arr))//[22,87,34,99,12,60]