开发者社区> 问答> 正文

js 数组拍平(数组扁平化)的六种方式

js 数组拍平(数组扁平化)的六种方式

展开
收起
kun坤 2019-11-28 13:57:00 705 0
1 条回答
写回答
取消 提交回答
  • 答案:

    1.数组拍平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组

    2.实现

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

    a:递归实现

    function fn(arr) {
      let arr1 = [];
      arr.forEach(val => {
        if (val instanceof Array) {
          arr1 = arr1.concat(fn(val));
        } else {
          arr1.push(val);
        }
      });
      return arr1;
    }
    

    b:reduce 实现

    function fn(arr) {
      return arr.reduce((prev, cur) => {
        return prev.concat(Array.isArray(cur) ? fn(cur) : cur);
      }, []);
    }
    

    c:flat

    参数为层数(默认一层)

    arr.flat(Infinity);
    

    d:扩展运算符

    function fn(arr) {
      let arr1 = [];
      let bStop = true;
      arr.forEach(val => {
        if (Array.isArray(val)) {
          arr1.push(...val);
          bStop = false;
        } else {
          arr1.push(val);
        }
      });
      if (bStop) {
        return arr1;
      }
      return fn(arr1);
    }
    

    e:toString

    let arr1 = arr
      .toString()
      .split(",")
      .map(val => {
        return parseInt(val);
      });
    console.log(arr1);
    

    f:apply

    function flatten(arr) {
      while (arr.some(item => Array.isArray(item))) {
        arr = [].concat.apply([], arr);
      }
      return arr;
    }
    
    
    2019-11-28 13:57:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript函数 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载