数组扁平化就是把多维数组转为一维数组
递归
1.for循环
遍历数组的每一项,如果不是数组,直接push,如果是数组,继续递归处理
const arr = [1,[2,3],[4,[5,6]]]
function flatten(arr){
const res = []
for(let i = 0; i < arr.length; i++){
if(Array.isArray(arr[i])){
res.push(...flatten(arr[i]))
//res = res.concat(flatten(arr[i]))
}else{
res.push(arr[i])
}
}
return res
}
flatten(arr)
2.reduce
const arr = [1,[2,3],[4,[5,6]]]
function flatten(arr){
return arr.reduce((res,cur)=>{
return res.concat(Array.isArray(cur)?flatten(cur):cur)
},[])
}
flatten(arr)
...运算符
...运算符可以将二维数组变为一维数组,做一个遍历,若arr中含有数组则使用一次扩展运算符,直至没有为止。
const arr = [1,[2,3],[4,[5,6]]]
function flatten(arr){
while(arr.some(item => Array.isArray(item))){
arr = [].concat(...arr)
}
return arr
}
flatten(arr)
toString()/join() + split()
如果数组每项都是数字,则可以先将数组转为字符串,再使用split()转为数组
const arr = [1,[2,3],[4,[5,6]]]
function flatten(arr){
return arr.toString().split(',').map(item => item * 1)
}
flatten(arr)