sourceData:
let baseArr = [1,2,[1,3],[['a','c'],[7],[[8]]],[9]]
1、递归
第一种
let newArr=[]
let getFlat = (arr) => {
arr.foreach( element => {
if(Array.isArray(element)){
getFlat(elelment)
}else{
newArr.push(element)
}
})
}
getFlat(baseArr)
第二种
function flatMap(arr) {
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
let tempArr = arr[i]
arr.splice(i, 1, ...tempArr)
i--
}
}
return arr
}
这种方法太秀了。
2、reduce函数
let getFlat = (arr) => {
return arr.reduce( (pre,cur) => {
if(Array.isArray(cur)){
return pre.concat(...getFlat(cur))
}else{
return pre.concat(cur)
}
},[])
}
getFlat(baseArr)
需要设置初始值为[],不然concat会报错
3、flat方法
let newArr = baseArr.flat(Infinity)
flat 方法的参数为展开层数,infinity ,无限展开
引申一下: arr.flatMap(fn) ,这个方法接受一个回调函数。 flatMap 相当于是对数组先进行了map操作,再进行flat一维展开
4、字符串方法
let baseArr = [1,2,[1,3],[[5,6],[7],[[8]]],[9]]
let arr = baseArr+"" //"1,2,1,3,5,6,7,8,9"
arr = arr.split(',') //["1", "2", "1", "3", "5", "6", "7", "8", "9"]
let newArr = arr.map(item=>{
return eval(item)
})
console.log(newArr) // [1,2,1,3,5,6,7,8,9]
此方法,适用于多维数组是”纯值“。 如果,多维数组有非纯值内容,eval()方法会报错。 如果不用eval ()方法处理,得到的将会是一个字符串的数组,和原始数组会有一些偏差。