如何实现一个数组扁平化函数

1,递归

function flattenDeep(arr){
    let deepArr = []
    arr.forEach(element => {
        if(Array.isArray(element)){
            deepArr = deepArr.concat(flattenDeep(element))
        }else{
            deepArr.push(element)
        }
    });
    return deepArr
}
console.log(flattenDeep([1,[2,3,[4,5]]])) //[ 1, 2, 3, 4, 5 ]

2,map方法

function flattenDeep2(arr){
    //map方法确保得到的是一维数组。cancat可以合并一维数组
    return [].concat(...arr.map(item => Array.isArray(item) ? flattenDeep2(item) : item))
}
console.log(flattenDeep([1,[2,3,[4,5],7],[2,3]]))

3,简单数据处理。如果原数组中有字符串类型,最终也会转换成数值类型。

const flattenDeep3 = (data) => data.toString().split(',').map(Number)
flattenDeep3([1, [2, [3, [4]], 5]]) // [ 1, 2, 3, 4, 5 ]
console.log([1, [2, [3, [4]], 5]].toString())  // 1 2 3 4 5
console.log([1, [2, [3, [4]], 5]].toString().split(',')) //[ '1', '2', '3', '4', '5' ]

4,Array.protoType.flat() 方法会递归到指定深度将所有子数组连接,并返回一个新数组.

function flattenDeep4(arr, deepLength) {
    return arr.flat(deepLength)
}
console.log(flattenDeep4([1, [2, [3, [4]], 5]], 3));

猜你喜欢

转载自blog.csdn.net/qq_43004614/article/details/92406606