第一种:数组字符串化
将数组转换为字符串,以逗号拼接,但是数组中的每一项都变为了字符串.
let arr = [[1, 2, 3], 4, [5, [6, 7]]]
arr += ''
arr = arr.split(',')
console.log(arr) // ['1','2','3','4','5','6','7']
第二种: 递归
封装函数, 进行递归调用
let arr = [[1, 2, 3], 4, [5, [6, 7]]]
let newArr = []
function deepArr(data) {
data.forEach(item => {
item instanceof Array ? deepArr(item) : newArr.push(item)
})
return newArr
}
console.log(deepArr(arr)) //[1,2,3,4,5,6,7]
第三种: Array.prototype.flat()
按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回.
let arr2 = [1, 2, [3, 4]]
console.log(arr2.flat()) // [1,2,3,4]
let arr3 = [1, 2, 3, [4, 5, [6, 7, [8]]]]
// Infinity表示无穷大
console.log(arr3.flat(Infinity)) // [1,2,3,4,5,6,7,8]
第四种: 利用reduce 和 concat
let arr4 = [1, [2, [3, 4]]];
function flatten(arr) {
return arr.reduce((pre, cur) => {
// sum.concat() 连接参数的数组,以sum开头
return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
}, [])
}
console.log(flatten(arr4)) // [1,2,3,4]