数组扁平化的几种方法

什么是数组扁平化?

 [1,2,3,[1,2]]->[1,2,3,1,2]

 [1,2,3,[1,2,[3,4]]]->[1,2,3,1,2,3,4]

就是将多维数组摊平成一维数组,那么接下来就给大家介绍几种方法:

一.数组方法

数组方法arr.flat()    

  • 不传参数扁平化默认深度是 一层

 

  • 传参数  arr.flat(2)深度就是2层
  • 参数如果是 正无穷,扁平化 无限层级的数组

二.递归实现

在数组的原型上自己添加一个方法。

常见一个新空数组;遍历原数组

遍历 this-》arr -- 把他里面的元素添加到 resArr

判断元素 是不是一个数组,如果不是,

直接添加到resArr中,如果是,就把元素 合并到 resArr中

let a = [...[3,4]]

 [ ].concat([3,4])

[ ].push(...[3,4])

 

三.非递归

在数组原型上添加一个方法

使用后数组方法.shift()删除头部 筛选数组

每次删除 头部的一个元素,判断不是一个数组,

如果不是 直接添加到 resArr中

如果是

    let arr2 = [1, 2, [3, 4, [5, 6]], [2, 3, 4]];    
     // 非递归
      Array.prototype.myFlat2 = function () {
        let resArr = [];
        /*
             arr [1, 2, [3, 4, [5, 6]]]

             stacks = [5, 6]
            
            */

        let stacks = [...this];
        let i = 0;
        while (stacks.length > 0) {
          //每次删除 头部的一个元素,判断不是一个数组,
          // 如果不是 直接添加到 resArr中
          // 如果是
          let v = stacks.shift();
          if (Array.isArray(v)) {
            stacks.push(...v);
          } else {
            resArr.push(v);
          }
        }
        return resArr;
      };
      console.log(arr2.myFlat2());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值