【前端面试专栏】请实现一个数组扁平化算法, 支持将数组扁平化次数作为入参

93 阅读1分钟

已知如下数组:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];

编写一个程序fn(array, max)将数组扁平化操作,入参max决定扁平化操作次数。

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]

function flat(target, maxCount){
    // 检查入参类型
    if(!(target instanceof Array) || typeof maxCount !== 'number')  {
      throw new Error('Params Type Error')
    }
    
  
   let count = 0; // 记录扁平化次数
   
   function execute(origin){
      count ++ 
      const arr = origin.reduce((x,y)=>[...x,...y instanceof Array ? y : [y]],[]) // 执行扁平化操作
      return count > maxCount ? arr : execute(arr) // 次数已到上限返回结果,否则继续扁平化
   }
  
  return execute(target)
}

flat(arr,1)