-
什么是数组扁平化?
将多维度数组转为一维,或者说将多层嵌套数组转换成最外一层有且只有一个中括号[]包裹元素数组,如:[1, 2, [3, 4], 5, [6, [7, 8]], 9] =》[1, 2, 3, 4, 5, 6, 7, 8, 9] -
实现方案
有很多实现方案,这里只列出两种:
① 通过ES6提供的数组扁平化API——flat实现
arr.flat(deep): 参数deep是控制扁平化维度,值为Number,0则不进行扁平化,返回原数组,infinite则扁平化所有维度,只有最外一层[]包裹元素。
② 手写递归函数实现(传入维度,可控制扁平化维度或者说扁平化的深度或层次)
思路:
(1)创建一个新数组用来存放扁平化处理后的元素。
(2)遍历要处理的数组元素,判断每个元素类型,非数组元素或深度为0(不扁平当前维度)就推入新数组中,是数组元素还要判断深度大于0,满足就将深度减一并且递归遍历处理将返回的数组与新数组拼接。
(3)返回新数组
// arr要处理的数组,depth是控制扁平化维度
function myFlat(arr, depth) {
const a = []
arr.forEach(ele => {
if (Array.isArray(ele) && depth > 0) {
depth--
a = a.concat(myFlat(ele, depth))
} else {
a.push(ele)
}
})
return a
}