数组的扁平化处理

数组扁平化就是把二维三维。。。数组转化成一维普通数组。

官方提供的方法是flat

flat函数默认参数是1,可以将二维数组转化成一维数组,以此类推参数是2可以将三维数组转化成一维数组,参数为Infinity可以将任意维度的数组转化成一维数组。

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

另一种实现数组扁平化的方法是concat,concat方法先拷贝调用的数组,然后将concat的参数依此push进拷贝数组里面。假如参数是数字、字符串,那么会直接push进拷贝数组,如果参数是数组,那么会先解构数组然后依此push进拷贝数组。

这里的解构你可以当做是用来去掉数组最外围的[ ]中括号的。解构的符号是...扩展运算符

var arr1 = [1, 2, 3]
var arr2 = [4, 5, 6]

// 参数是数字、字符串,所以直接push进arr1的拷贝数组。
arr1.concat(4, 'a') // [1, 2, 3, 4, 'a']

// 因为参数arr2是数组,所以会去掉arr2最外围的中括号,然后把值依次push进arr1的拷贝数组里。
arr1.concat(arr2) // [1, 2, 3, 4, 5, 6]

var arr3 = [4, [5, 6]]

// arr3是数组,所以先解构去掉最外围的中括号[ ],然后将数组元素依次push进arr1的拷贝数组。
arr1.concat(arr3) // [1, 2, 3, 4, [5, 6]]

// 这里先使用...解构数组,所以arr1.concat(...arr3)等同于arr1.concat(4, [5, 6])
// 4是数字所以直接push进arr1的拷贝数组,[5, 6]是数组所以先解构数组然后依次把5,6push进拷贝数组。
arr1.concat(...arr3) // [1, 2, 3, 4, 5, 6]

flat([1, [2, 3]]) // [1, 2, 3]
function flat(arr){
    // 假如arr中存在一个元素是数组,那么循环一直执行,循环每执行一次就降低arr的一个维度。
    while(arr.some(item=>Array.isArray(item))){
        // 先将arr解构,这时下面的表达式等同于arr = [].concat(1, [2, 3])
        // 所以1直接push进数组,[2, 3]先解构再push进数组。
        arr = [].concat(...arr)
    }
    return arr
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值