工具函数系列-数组拉平

ES6

Array.prototype.flat()

拉平数组,变成一维的数组,返回一个新数组。

[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]

flat()的参数默认为1,表示只会拉平1层。如果要拉平多层则传入参数,表示想要拉平的层数。

[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]

如果不管多少层数据,都要转为1层数组,可以用Infinity作为参数。

[1, 2, [3, [4, 5]]].flat(Infinity)
// [1, 2, 3, 4, 5]

如果原数组有空位,flat()会跳过空位

[1, 2, , 3, 4].flat()
// [1, 2, 3, 4]

polyfill

Array.prototype.reduce()

会跳过原数组空位。

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

function reduce(a, res = []) { 
    a.reduce((res, cur) => {
        if (cur instanceof Array) {
            reduce(cur, res)
        } else {
            res.push(cur)
        }
        return res
    }, res)
    return res
}
console.log('res', reduce(a, []))

Array.prototype.forEach()

会跳过原数组空位

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

function forEach(a, res = []) {
    a.forEach(item => {
        if (item instanceof Array) {
            forEach(item, res)
        } else {
            res.push(item)
        }
    })
    return res
}

console.log('map: ', forEach(a, []))