工具函数系列-数组拉平
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, []))