总结一些日常需要用到的一些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道面试题,并对每个问题作出了回答和解析。
有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享
部分文档展示:
文章篇幅有限,后面的内容就不一一展示了
有需要的小伙伴,可以点下方卡片免费领取