数组扁平化: 就是把多层嵌套的数组中的内容取出,变成一维的数组
就像 [1, 2, 3,?[4, 5], [6, 7, [8, 9]], 10,11] 处理成 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
1. 递归方式处理
咱们在写递归的时候,其实只需要考虑两层就好,因为再往后其实就是和之前一样了,要不然一直跟着程序的执行想下去 ,搞不好连自己都绕进去了
let arr = [1, 2, 3, [4, 5], [6, 7, [8, 9]], 10, 11]
function flatArr(list) {
if (list.constructor !== Array) {
return []
}
let arr = []
list.forEach(item => {
if (item && typeof item === 'object') {
arr.push(...flatArr(item)) // 或者 arr = arr.concat(flatArr(item)) 或者 arr = [...arr, ...flatArr(item)]
} else {
arr.push(item)
}
})
return arr
}
let newArr = flatArr(arr)
console.log(newArr) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
console.log(newArr.length) // 11
2. 利用 Array - arr.flat() 扁平化多维数组
/**
* Array - arr.flat(<depth>) 扁平化多维数组
* 1. 可选参数:depth 指定要提取嵌套数组的结构深度,默认值为 1。
* 2. 返回值:一个包含将数组与子数组中所有元素的新数组
* 3. depth 设置为 Infinity 无限扁平
*/
let arr = [1, 2, 3, [4, 5], [6, 7, [8, 9]], 10, 11]
arr.flat() // [ 1, 2, 3, 4, 5, 6, 7, [ 8, 9 ], 10, 11 ]
arr.flat(2) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr.flat(Infinity) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
当然除了上述两种方式外,还有其他方式,选择适合自己的方式才是最为关键的,我这里是将自己习惯用的简单整理了下
|