zoukankan      html  css  js  c++  java
  • 【JS简洁之道小技巧】第一期 扁平化数组

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

    flat

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

        需要注意的是:第一,flat方法一旦使用,必将移除掉数组的empty空项;第二,flat方法返回一个新数组,并不会改变原数组。

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

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

     

    reduce和concat递归

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

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

      

     

      

      

  • 相关阅读:
    oracle课堂笔记---第十九天
    oracle课堂笔记--第十八天
    oracle课堂随笔--第十七天
    oracle课堂随笔--第十六天
    oracle课堂随笔--第十五天
    oracle课堂随笔--第十四天
    oracle课堂笔记--第十三天
    oracle课堂随笔--第十一天
    Beta冲刺预备
    个人作业——软件产品分析
  • 原文地址:https://www.cnblogs.com/zhangnan35/p/11262549.html
Copyright © 2011-2022 走看看