要不要进来看下数组降维?(数组拍平)

数组可能有多维,有时候我们希望把多维数组降为一维数组,这种情况下用递归的方法进行降维,也可通过ES6的数组原型方法flat进行降维。下面给出相关实现:

1、前情提要

1. 何为多维数组?
[1,2,3] //这是以为数组
[1,2,[3,4]] //这是二维

简单来说,就是数组套数组的最高层数

[1,[2,4], [4,3,[4,5]]] 这个最高的是套了三层,那就是三维

2. 递归须知

1、确定递归条件
2、确定终止条件

2、利用forEach进行递归降维

 let tmp = [];
function flat_1(arr) {
  arr.forEach((item) => {
    if (Array.isArray(item)) { //递归条件
      flat_1(item);
    } else { //终止条件
      tmp.push(item);
    }
  });
}

flat_1(arr)
这时tmp便是已经一维数组
3、利用reduce进行递归降维
function flat_1(arr) {
    return arr.reduce((pre,cur) => {
        if(Array.isArray(cur)) { //递归条件
            return pre.concat(flat_1(cur))
        }
        return pre.concat(cur) //终止条件
    }, [])
}

flat_1(arr)
这时便会返回已经降维的数组

3、利用ES6提供的数组原型方法flat进行降维

flat()方法创建一个新数组,其中所有子数组元素都以递归方式连接到该数组中,直到达到指定的深度 – MDN

该方法只有一个参数depth,用于指定嵌套数组结构应展平的深度级别。默认为1

简单来说就是,flat(2)可以拍平二维数组,flat(3)可以拍平3维数组,flat(n)可以拍平n维数组,如果你不知道数组是几维,中间的维数可以定位无限大,即Infinityflat(Infinity)

拍平任意维数组:

arr.flat(Infinity)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值