【JS简洁之道小技巧】第一期 扁平化数组

  介绍两种方法,一是ES6的flat,简单粗暴。二是递归,也不麻烦。

flat

  ES6自带了flat方法,用于使一个嵌套的数组扁平化,默认展开一个嵌套层。flat方法接收一个数字类型参数,参数值即嵌套层的深度,默认为1。(注意是“嵌套层”不是“层”,如传入0则不展开任何嵌套)

   需要注意的是:flat方法一旦使用,必将移除掉数组的empty空项。

  由于我们不好确定最大嵌套层的深度,因此有个很暴力的方法,直接传入Infinity,可以展开任意深度的嵌套数组。

let flattenDeep = (arr) =>{
    return arr.flat(Infinity);
}

 

reduce和concat递归

  这种方法也不麻烦,以一个空数组为基础值,遇到非数组的子元素,则加入到基础值数组中;如遇到数组子元素,说明有嵌套层,则递归使用flattenDeep方法,等待其返回一维扁平数组,然后再追加到基础值数组中。最后,把这个基础值数组return出去。

let flattenDeep = (arr1) =>{
   return arr1.reduce((acc, val) => 
    Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);
}            

  

 

  

  

猜你喜欢

转载自www.cnblogs.com/zhangnan35/p/11262549.html