方法一:递归遍历
const arr = [1, 2,3,[4,5],[7, [8, [9, [10]]]]]
// 方法一:直接遍历法
let arrNew=[]
dealArr(arr,arrNew)
console.log('===== arrNew:',arrNew)
function dealArr(arr){
const length = arr.length
for (let i = 0; i <length; i++) {
const ele = arr[i];
if(Array.isArray(ele)){
dealArr(ele)
}else{
arrNew.push(ele)
}
}
}
方法二:扩展运算符
const arr = [1, 2,3,[4,5],[7, [8, [9, [10]]]]]
// 方法一:concat结合扩展运算符
let arrNew2 = dealArr2(arr)
console.log('===== arrNew2:',arrNew2)
function dealArr2(arr){
while(arr.some(item=>Array.isArray(item))){
arr = [].concat(...arr)
}
return arr
}
方法三:toString和split方法结合
const arr = [1, 2, 3, [4, 5],[7, [8, [9, [10]]]]]
// 方法三:
const arrStr = arr.toString()
const arrTemp = arrStr.split(',') //此时得到的数组元素是字符串类型
// 将元素转换为number类型
const arrNew3 = arrTemp.map(item => {
return parseInt(item)
})
console.log('arrNew3: ', arrNew3)
方法四:Javascript的flat方法
flat方法可以指定结构深度,因为我们这里是多层数组,所以我们使用flat(Infinity)处理任意层级的数组
// 方法四:
const arrNew4= arr.flat(Infinity)
console.log('==== arrNew4: ',arrNew4)
方法五:reduce()
const arr = [1, 2, 3, [4, 5], [7, [8, [9, [10]]]]]
// 方法五
function platArr(arr) {
return arr.reduce((current, next) => {
const nextNew = Array.isArray(next) ? platArr(next) : next
return current.concat(nextNew)
}, [])
}