[前端攻坚]:数组拍平的几种方法

总结一些日常需要用到的一些api,也是在一些面试中会经常出现的题目,今天分享的是数组拍平的几个不同的方法, 同时文章也被收录到我的《JS基础》专栏中,欢迎大家点击收藏加关注。

使用原生flat函数

flat()  方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回

[1,2,[3]].flat() // 
[1, 2, 3] [1,2,[3,[4]]].flat(2) // [1, 2, 3, 4] 

使用原生的flat函数可以对函数进行拍平,但是需要传入需要拍平的层级,如果只传了1就只展开一层,该方法只针对固定的层级做展开,如果是展开层级不确定的情况下,该方法不适合

while循环+concat方法

concat()  方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组

同时concat也可以作为展开一层进行使用

let a = [].concat(...[1, 2, 3, [4, 5, [6, 7]]])
console.log(a) //[ 1, 2, 3, 4, 5, [ 6, 7 ] ] 

利用这个特性可以来实现多层展开

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

while循环的退出条件是数组中的元素都不是数组,如果遇到一个数组,就让数组去掉一层,直到数组中不存在数组元素为止。

for循环递归+展开语法

虽然都是循环+concat,但是两个之间的写法不一样,写出来的思路也是不一样的,而且用到了递归的思路,遇到数组元素进行递归,递归把数组元素每一层进行解开,如果不是数组元素就进行push即可

function toarr(arr){let a = []for(let item of arr){if(Array.isArray(item)){a= a.push(...toarr(item))}else{a.push(item)}}return a
} 

reduce方法

也是类似于循环的方法,只是reduce的循环是前后两个元素循环出一个新的元素

function toarr(arr){let a = arr.reduce((pre,cur)=>{return pre.concat(Array.isArray(cur)?toarr(cur):cur)},[])return a
} 

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值