实现数组扁平化
概念: 把多层嵌套的数组中的内容取出,变成一维的数组。
一、使用递归实现
遍历数组,判断每一项是否是数组,如果是就继续调用自己的函数方法
// 判断子项是否为数组 如果为数组继续调用
var arr=[[1,2,3],[[4],[5]],6]
function flatten(arr){
let res=[]
arr.forEach(v=>{
if(Array.isArray(v))
{
res=res.concat(flatten(v))
}
else{
res.push(v)
}
})
return res
}
console.log(flatten(arr));
//[1,2,3,4,5,6]
二、使用扩展运算符
使用数组的some方法,判断某一项是否是数组类型,如果是,就给数组重新赋值,数组被展开拼接
var arr=[1,[2,3],[4,[5]],[6]]
function flatten(arr){
while(arr.some(v=>Array.isArray(v)))
{
arr=[].concat(...arr)
}
return arr
}
console.log(flatten(arr));
三、使用Es6的flat方法
Es6的方法flat(n) n的值默认是1,Infinity是无限次
var arr=[1,[2,3],[4,[5]],[6]]
console.log(arr.flat(Infinity));
四、使用toString和split
toString方法把数组转为字符串,再使用split分割为原数组,再变为数字类型
不建议使用,会改变数据类型
var arr=[1,[2,3],[4,[5]],[6]]
console.log(arr.toString().split(',').map(v=>+v));
五、使用reduce方法
使用reduce函数的累加特性,上一步执行完作为参数继续执行
var arr=[1,[2,3],[4,[5]],[6]]
function flatten(arr){
return arr.reduce((prev,curr)=>{
return prev.concat(Array.isArray(curr)?flatten(curr):curr)
},[])
}
console.log(flatten(arr));