# 数组扁平化
把多维的数组降级为一维度
- 方法一: while循环
let arr = [[1, 2], 3, 4, [[6, 7], 8]];
while ( arr.some(item=>Array.isArray(item)) ){
arr = [].concat(...arr)
}
- 方法二: flat 可以设置扁平化的维度
let arr = [[1, 2], 3, 4, [[6, 7], 8]];
console.log(arr.flat(1)) // [1,2,3,4,[6,7],8]
console.log(arr.flat(2)) // [1,2,3,4,5,6,7,8]
console.log(arr.flat(Infinity)) //[1,2,3,4,5,6,7,8] 无论数组是多少维度,都变成1维
- 方法三: reduce
function flattenDeep(arr) {
return Array.isArray(arr)
? arr.reduce( (acc, cur) => [...acc, ...flattenDeep(cur)] , [])
: [arr]
}
- 方法四: 逐层降维 思想很重要
let arr = [[1, 2], 3, 4, [[6, 7], 8]]
let arr2 = [...arr]
let tag = []; // 3
while (arr2.length > 0) {
const t = arr2.pop(); // 取最后面的一个元素
if (Array.isArray(t)) {
// 是数组 讲解一维度并插入到数组的最后
arr2.push(...t)
} else {
console.log(tag)
tag.unshift(t)
}
}
console.log(tag)