数组扁平化/数组拉平

数组扁平化/数组拉平

方法一:
用ECMAscript 2019 中的flat方法

		var  arr=[1,[2,3],[4,5],[6,[7,8],9,[[[10,[[11,12],13],14],15,16],17],18]];
		arr.flat(Infinity);	//参数为层数,默认一层

注意:flat和flatMap方法为ES2019(ES10)方法,目前还未在所有浏览器完全兼容。

方法二:
利用arr.toString(),将数组转换为字符串
再利用str.split(‘ ,’),将字符串转换为新的数组

  var arr=[1,[2,3],[4,5],[6,[7,8],9,[[[10,[[11,12],13],14],15,16],17],18]];
            var str=arr.toString(); 		//转换为字符串
            var arr2=str.split(',');        //转回数组
            for(var i=0;i<arr2.length;i++){     //将新数组的每一项转换为整型,与原数组保持一致
                arr2[i]=parseInt(arr2[i]);         
            }
            console.log(arr2); 

方法三:
concat+apply实现

var arr=[1,[2,3],[4,5],[6,[7,8],9,[[[10,[[11,12],13],14],15,16],17],18]];
      function fun(arr){
        while(arr.some(item => Array.isArray(item))){			//判断数组的每一个元素是否是数组
           arr =  [].concat.apply([],arr);
       }
     return arr;
   }
   console.log(fun(arr));

说明:
1.实质是利用递归和数组合并方法concat实现扁平。
2.some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。详细描述
3.apply方法会调用一个函数,apply方法的第一个参数会作为被调用函数的this值,apply方法的第二个参数(一个数组,或类数组的对象)会作为被调用对象的arguments值,也就是说该数组的各个元素将会依次成为被调用函数的各个参数;arr作为apply方法的第二个参数,本身是一个数组,数组中的每一个元素(还是数组,即二维数组的第二维)会被作为参数依次传入到concat中,效果等同于[].concat(1, 2, 3, [4, 5, 6], 7, 8, [9, 10])。利用apply方法,我们将单重循环优化为了一行代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大兵的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值