// 主要的思路
// 1. 遍历数组
// 2. 判断元素是否是数组
// 3. 将数组的每一层都展开
let arr = [1, 2, 3, 4, [1, 2, 3, [1, 2, 3, [1, 2, 3]]], 5, "string", { name: "弹铁蛋同学" }]
// 方法一:递归
function flatten(arr) {
let res = []
for(let val of arr) {
if(val instanceof Array) {
res = res.concat(flatten(val))
} else {
res.push(val)
}
}
return res
}
console.log(flatten(arr))
// 方法二:reduce + concat + 递归
function flatten1(arr) {
let result = []
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? flatten1(cur) : cur)
}, [])
}
console.log(flatten1(arr))
// 方法三: flat
const result = arr.flat(Infinity)
console.log(result)
// 方法四:toStri
const string = arr.toString().split(',').map(item => {
return parseInt(item)
})
console.log(string)
// 方法五:指定深度的扁平化
function flatten5(arr, dep, result = []) {
if(arr.length == 0) return []
for(let val of arr) {
if(dep > 0 && Array.isArray(val)) {
if(dep >= 1) {
flatten5(val, dep - 1, result)
} else {
result.push(val)
}
} else {
result[result.length] = val
}
}
return result
}
console.log(flatten5(arr, 3))
console