JavaScript编程之手写扁平函数(flat)

数组扁平化(flat)的几种方法

  1. 递归

function flat(arr) {
    let result = []

    function make_flat(arr) {
        if (Array.isArray(arr)) {
            for(let i=0;i<arr.length;i++) {
                if(Array.isArray(arr[i])) {
                    make_flat(arr[i])
                } else {
                    result.push(arr[i])
                }
            }
        } else {
            result.push(arr)
        }
    }

    make_flat(arr)
    return result
}

const raw = [1,[1,2,[8,9]],3,4]
console.log('--raw--')
console.log(raw)
const ans = flat(raw)
console.log('---ans--')
console.log(ans)
  1. reduce实现flat

function flat(arr) {
    return arr.reduce((pre, cur) => {
        return pre.concat(Array.isArray(cur) ? flat(cur) : cur);
    }, [])
}
const raw = [1, 2, [3, 4], [5, [6, 7]]]

console.log(flat(raw))

// --raw--
// [ 1, [ 1, 2, [ 8, 9 ] ], 3, 4 ]
// ---ans--
// [ 1, 1, 2, 8, 9, 3, 4 ]
  1. 扩展运算符

function flat(arr) {
    while (arr.some(Array.isArray)) {
        arr = [].concat(...arr)
    }
    return arr
}

Mark24

Everything can Mix.