多种方式实现数组的扁平化处理

//task 1 split方法处理
1 function flattening(arr) {
2     let arr1 = (arr + "").split(",");
3     //此时得到的每一项的字符数组
4     //接着转数字
5     let arr2 = arr1.map(item => {
6         return item * 1;
7     })
8     return arr2;
9 }
//task 2 递归
 1 function flattening(arr, newArr = []) {
 2     for (let i = 0; i < arr.length; i++) {
 3         if (Array.isArray(arr[i])) {
 4             flattening(arr[i], newArr)
 5         } else {
 6             newArr.push(arr[i])
 7         }
 8     }
 9     return newArr
10 }
//task 2.1 递归第二种写法
 1 function flattening(arr) {
 2     var res = [];
 3     arr.map(item => {
 4         if (Array.isArray(item)) {
 5             res = res.concat(flattening(item));
 6         } else {
 7             res.push(item);
 8         }
 9     });
10     return res;
11 }
//task 3 扩展运算符
1 function flattening(arr) {
2     while (arr.some(item => Array.isArray(item))) {
3         arr = [].concat(...arr)
4     }
5     return arr;
6 }
//task 4 reduce+递归实现
 1 function flattening(arr) {
 2       let newArr=arr.reduce((prev,cur)=>{
 3         return [].concat(prev,cur)
 4     })
 5     
 6     let flag=newArr.some(item=>Array.isArray(item))
 7     if(flag){
 8         return flattening(newArr);
 9     }else{
10         return newArr
11     }
12 }

 

其实说了这么多方法 es6有一个封装好的方法可以进行数组扁平化处理  

Array.flat();

flat 方法默认没有参数  这时只会降维降一层 

可以传数字指定降维次数  传个无穷就是全部展开 

flat放法不会改变原数组  并且不支持node运行

 

顺带提一句合并数组的几种方法

let arr1 = [1, 2];
let arr2 = [3, 4];
concat
arr1 = arr1.concat(arr2);
扩展运算符
arr1 = [...arr1, ...arr2];
或者
arr1.push(...arr2);
当数据小的时候三者没有区别 但是数据特别大的时候 concat性能远远高于其他两个

转载于:https://www.cnblogs.com/cq1715584439/p/10742854.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值