数组扁平化
数组扁平化是讲一个多维数组编程一个一维数组
1 2
   | [1, 2, 3, [4, 5, [6, 7]]]  [1, 2, 3, 4, 5, 6, 7] 	
   | 
下面介绍几种数组扁平化的方式
1. 简单递归实现
这里将flat函数挂载到原型链上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | Array.prototype.flat = function() {   let arr = this    let ret = []      arr.forEach((item) => {          if (!Array.isArray(item)) {              ret.push(item)      } else {              ret.push(...item.flat())     }   })   return ret }
  let arr = [1, 2, 3, [4, 5, [6, 7]]] console.log(arr.flat()) 
 
  | 
2. ES6 flat方法
使用es6的arr.flat()方法即可,传入的参数为扁平化的层数,如果为Infinity则表示不管多少层,都扁平化为一维数组
1 2 3 4 5
   | let arr = [1, 2, 3, [4, 5, [6, 7]]] console.log(arr.flat(Infinity)) 
  console.log(arr.flat(1))
 
   | 
3. 模拟es6方法
上面的第一种方式已经实现了数组扁平化,现在要传入一个参数level,表示扁平化的层数。
并且在开始判断层数是否存在,或者是否小于等于0
递归的时候传入参数 level - 1 即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   | Array.prototype.flat = function(level) {      if (!level || level <= 0 ) {     return this   }   let arr = this    let ret = []      arr.forEach((item) => {          if (!Array.isArray(item)) {              ret.push(item)      } else {                     ret.push(...item.flat(level - 1))     }   })   return ret }
  let arr = [1, 2, 3, [4, 5, [6, 7, [8, 9]]]] console.log(arr.flat(0))  console.log(arr.flat(1))  console.log(arr.flat(2))  console.log(arr.flat(Infinity)) 
  | 
以上就是数组扁平化的简单实现,核心思想就是递归