数组扁平化

1 篇文章 0 订阅
含义

数组扁平化概念:数组扁平化是指将一个多维数组变为一维数组

5种方式实现数组扁平化
1. 递归 递归的遍历每一项,若为数组则继续遍历,否则concat
var arr = [1, [2, 3, [4, 5,[6,7,8,[9,10]]]]];

function flatten1(arr) {
    var res = [];
    arr.map(item => {
    	// 判断遍历的值是否是数组 
        if(Array.isArray(item)) {
        	// 递归
            res = res.concat(flatten1(item));
        } else {
            res.push(item);
        }
    });
    return res;
}
console.log(flatten1(arr))
2. toString & split 调用数组的toString方法,将数组变为字符串然后再用split分割还原为数组
  var arr = [1, [2, 3, [4, 5,[6,7,8,[9,10]]]]];
  
  function flatten2(arr) {
      return arr.toString().split(',').map(function(item) {
        // 因为split分割后形成的数组的每一项值为字符串,所以需要用一个map方法遍历数组将其每一项转换为数值型
          return Number(item);
      })
  } 

  console.log(flatten2(arr))
3. join & split: 和上面的toString一样,join也可以将数组转换为字符串
 var arr = [1, [2, 3, [4, 5,[6,7,8,[9,10]]]]];
 
 function flatten3(arr) {
    return arr.join(',').split(',').map(function(item) {
        return parseInt(item);
    })
}

console.log(flatten3(arr))
4. reduce:遍历数组每一项,若值为数组则递归遍历,否则concat

reduce是数组的一种方法,它接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
reduce包含两个参数:回调函数,传给total的初始值

 var arr = [1, [2, 3, [4, 5,[6,7,8,[9,10]]]]];
 
 function flatten4(arr) {  
      return arr.reduce((result, item)=> {
          return result.concat(Array.isArray(item) ? flatten4(item) : item);
      }, []);
   }

   console.log(flatten4(arr))
5. 扩展运算符:es6的扩展运算符能将二维数组变为一维
 var arr = [1, [2, 3, [4, 5,[6,7,8,[9,10]]]]];

function flatten5(arr) {
    while(arr.some(item=>Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}

console.log(flatten5(arr))

总结:遍历数组arr,若arr[i]为数组则递归遍历,直至arr[i]不为数组然后与之前的结果concat。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值