数组扁平化

数组扁平化

接收一个 多维数组 arr 和它的深度 n ,并返回该数组的 扁平化 后的结果。

多维数组 是一种包含整数或其他 多维数组 的递归数据结构。

数组 扁平化 是对数组的一种操作,定义是将原数组部分或全部子数组删除,并替换为该子数组中的实际元素。只有当嵌套的数组深度大于 n 时,才应该执行扁平化操作。第一层数组中元素的深度被认为是 0。

1
2
3
4
5
输入
arr = [1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]]
n = 0
输出
[1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]]
1
2
3
4
5
6
7
8
9
10
输入
arr = [1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]]
n = 1
输出
[1, 2, 3, 4, 5, 6, 7, 8, [9, 10, 11], 12, 13, 14, 15]

/*
解释
以 4 、7 和 13 开头的子数组都被扁平化了,这是因为它们的深度为 0 , 而 0 小于 1 。然而 [9,10,11] 其深度为 1 ,所以未被扁平化
*/

方法一:循环法

根据传入的深度n进行n次循环遍历,一次循环进行一次扁平化。

1
2
3
4
5
6
7
8
9
var flat = function (arr, n) {
//当n大于0并且循环的数组内是数组,进行一层扁平化
while(n>0 && arr.some(item=>Array.isArray(item))){
arr = [].concat(...arr)
n--
}
return arr

};

方法二:递归法

1
2
3
4
5
6
7
8
var flat = function (arr, n) {
if(n<=0) return arr
const result = []
for(let i=0;i<arr.length;i++){
result.push(...(Array.isArray(arr[i])?flat(item,n-1):[item]))
}
return result
};

数组扁平化
http://example.com/2023/09/27/数组扁平化/
作者
AlongSunsea
发布于
2023年9月27日
许可协议