前端学习-JavaScript每日一题-数组扁平化

数组扁平化问题描述

数据扁平化,指把多维数组变成一维数组

即原始数组:[1,[2,[3,[4,5]]]]

经过扁平化后:[1,2,3,4,5]

数组扁平化的具体方法

数组扁平化实现起来并不复杂,涉及很简单的算法,还可以通过一些JS数组自带的方法实现

使用flat方法实现数组扁平化

  • Array.flat(depth)
  • depth参数可选,默认为1,表示数组扁平化的层数,设为Infinity则为完全展开
  • const arr  = ['a' , 'b', 'c', ['d','e'], ['f', [ 'g', 'h']]];
    console.log(arr.flat());
    
    ['a','b','c','d','e','f',['g','h']]
    
    const arr  = ['a' , 'b', 'c', ['d','e'], ['f', [ 'g', 'h']]];
    console.log(arr.flat(2));
    
    ['a','b','c','d','e','f','g','h']

因此使用flat实现扁平化的方法为:

 const arr  = [1,[2,[3,[4,5]]]];
 console.log( arr.flat(Infinity) );

使用递归方法实现数组扁平化

  • Array.concat()方法
  • 该方法可以把数组连接
  • console.log( [1,2].concat([3,[4,5]]) );
    [1,2,3,[4,5]]
  • Array.isArray()方法
  • 判断输入的元素是否是Array

使用递归方法实现数组扁平化:

要注意:因为Array.concat方法不会改变原来的数组,因此需要进行赋值操作,否则会得到不正确的结果

        const arr  = [1,[2,[3,[4,5]]]];
        function flatten(arr){
            let result = [];
            for(let i = 0;i<arr.length;i++){
                if( Array.isArray(arr[i]) ){
                    result = result.concat(flatten(arr[i]));
                }
                else{
                    result.push(arr[i]);
                }
            }
            return result;
        }
        console.log( flatten(arr) );

复杂度分析:

O(n)

其中n为扁平后一维数组的元素个数

使用reduce方法实现数组扁平化

  • Array.reduce()
  • 该方法的输入有两个参数,第一个参数是函数,第二个参数可选,为初始值
  • 第一个参数:该函数有四个形参,但是通常只用前两个 pre,cur
  • pre为上一次函数执行返回的结果
  • cur为当前遍历到的数组元素
  • 第二个参数:如果不填,则pre默认从数组第一个元素开始,cur为第二个,
  • 如果有参数,则pre为参数,cur为数组第一个元素

具体的实现方法:

        const arr  = [1,[2,[3,[4,5]]]];
        function flatten(arr){
            return arr.reduce(
                (pre,cur)=>{
                    return pre.concat( Array.isArray(cur)?flatten(cur):cur );
                }
            ,[]);
        }
        console.log( flatten(arr) );

使用Array.toString()和String.split()方式实现数组扁平化

  • Array.toString()
  • 可以把数组转换成字符串
  • 具体的转换效果:
  •  const arr  = [1,[2,[3,[4,5]]]];
     console.log( arr.toString() );
    
     "1,2,3,4,5"
  • String.split()
  • 可以把字符串拆分成数组
  • 不填的话默认是整个字符串是数组的一个元素,填写的话就会按分隔符拆分
  • 这种方法的问题是,拆分后,数组的每一个元素是字符,而不是数字了

具体实现方法:

 const arr  = [1,[2,[3,[4,5]]]];
 console.log( arr.toString().split(",") );

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值