数组-----扁平化(多维数组变为一维数组)

数组扁平化问题:
数组扁平化是指将一个多维数组变为一维数组
var arr = [2, [3, 4], [5, [6,7], 8], 9, 0]
输出为[2,3,4,5,6,7,8,9,0]

1. for-in

利用for-in的遍历机制,和递归调用

var newArr = []
function f(arr){  
  for(val of arr){
    // console.log(val,"val")
    if(typeof(val)=='number'){
      newArr.push(val)
      // console.log(val,"n")
    }else{
      f(val)
      // console.log(val,"shuzu")
    }
  }
  return newArr
}

let res =  f(a)
console.log(res)
[  2, 3, 4, 5, 6, 7, 8, 9, 0 ]

2.reduce()

function flatten2(arr) {  
  return arr.reduce((result, item)=> {
      return result.concat(Array.isArray(item) ? flatten2(item) : item);
  }, []);
}

reduce方法:
语法:

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

参数:

参数描述
function(total,currentValue, index,arr)必需。用于执行每个数组元素的函数
initialValue可选。传递给函数的初始值

回调函数参数:

参数描述
total必需。初始值, 或者计算结束后的返回值
currentValue必需。当前元素
currentIndex可选。当前元素的索引
arr可选。当前元素所属的数组对象

concat方法:
作用:是数组的方法,用来给拼接数组。参数是数组时实现两个数组的拼接,参数是多个数字时是在原数组后拼接这些数字。
例:arr.concat([2,3])或arr.concat(2,3)

3.toString()

function flatten3(arr) {
  return  arr.toString().split(',').map((item)=>{
    return Number(item)
  })
}
  1. toString()方法:
    由于每个类型下面都重写了toString()方法,而Array下面的toString方法就可以把数组的元素转换成字符串,Array.prototype.toString()。
  2. map()详见:https://blog.csdn.net/qq_43198793/article/details/109327996

4.join()

类似于toString()方法,把数组先转化为字符串

function flatten4(arr) {
  return  arr.join().split(',').map((item)=>{
    return Number(item)
  })
}

5.解构

  • …arr可以将二维数组解构成一维数组。
  • 判断数组中的元素是否还有数组,有的话就继续递归解构。
function flatten6(arr) {
  while(arr.some(item=>Array.isArray(item))) {
      arr = [].concat(...arr);
  }
  return arr;
}

6.flat()

arr.flat()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值