含义:是将一个嵌套多维的数组,转化为只有一层的数组。
1. 递归实现
const arr = [1, [2, [3, 4, 5]]]
function flatten(arr) {
let res = []
for(let i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])) {
res = res.concat(flatten(arr[i]))
} else {
res.push(arr[i])
}
}
return res
}
const newArr = flatten(arr)
console.log(newArr) // [1, 2, 3, 4, 5]
2. reduce 函数迭代
const arr = [1, [2, [3, 4, 5]]]
function flatten(arr) {
return arr.reduce((prev, item) => {
return prev.concat(Array.isArray(item) ? flatten(item) : item)
}, [])
}
const newArr = flatten(arr)
console.log(newArr) // [1, 2, 3, 4, 5]
3. 扩展运算符实现
function flatten(arr) {
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
4. 使用 toString 和 split 共同处理
function flatten(arr) {
return arr.toString().split(',')
}
5. ES6的flat
function flatten(arr) {
return arr.flat(Infinity)
}
6. 使用JSON和正则
function flatten(arr) {
let str = JSON.stringify(arr)
str = str.replace(/(\[|\])/g, '')
str = '[' + str + ']'
return JSON.parse(str)
}