数组扁平化是js面试题中机考或者是笔试题中常见的考题,下面我为大家整理了几种数组扁平化的方式,望大家参考,如果有其他的方法,大家可以踊跃留言
这里就以三维数组作为示例,当然,这几种方法适用于多维数组,二维数组及以上都是可以的
- 第一种方法join和split
let arr = [1,2,3,[9,3,4,[5,6,78]]]
let arr1 = arr.join(',').split(',')
function demo() {
return arr.join(',').split(',').map(item=>{
return parseInt(item)
})
}
demo(arr)
- 第二种方法使用reduce函数,遍历数组中的每一项,若值为数组则接着递归遍历,否则concat,进行连接
let arr2 = [1,2,3,[9,3,4,[5,6,78]]]
function demo1(arr2) {
return arr2.reduce((a,b) =>{
return a.concat(Array.isArray(b) ? demo1(b) : b)
},[])
}
demo1(arr2)
- 第三种方法 toString && split
let arr3 = [1,2,3,[9,3,4,[5,6,78]]]
function demo2(arr3) {
return arr3.toString().split(',').map(item =>{
return Number(item)
})
}
demo2(arr3)
- 第四种方法 使用递归便利每一项,如果是数组的话,就继续递归,否则concat,进行连接
let arr4 = [1,2,3,[9,3,4,[5,6,78]]]
function demo3(arr4) {
let arr5 = []
arr4.map(item =>{
if (Array.isArray(item)){
arr5 = arr5.concat(demo3(item))
} else {
arr5.push(item)
}
})
return arr5
}
demo3(arr4)
- 第五种方法,扩展运算符
let arr6 = [1,2,3,[9,3,4,[5,6,78]]]
function demo4(arr6) {
while (arr6.some(item =>Array.isArray(item))){
arr6 = [].concat(...arr6)
}
return arr6
}
demo4(arr6)
- 第六种方法,flat函数 flat函数默认传参1,Infinity的含义表示无限深度
值为负数的含义对于多维数组并没有实际的含义,所以程序在执行的时候会默认传递参数为1
let a = [1,2,[3,4,[5,6,7]]]
console.log(a.flat(Infinity)); // [1,2,3,4,5,6,7]
- 这里值得注意的是,flat函数会默认将原数组中的空值删除,演示效果如下
let a = [1,2,,3,4,,6]
console.log(a.flat()); // [1, 2, 3, 4, 6]
这里的打印,啊数组调用flat函数将原数组中的空值删除了
-
以上几种方法在控制台打印的效果如下
有什么其他的更为简便的方法,大家可以踊跃在下面留言,作者都会看的哦
极速更新中......