# 数组扁平化

把多维的数组降级为一维度

  • 方法一: 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)