题目类似如下:
请你编写一个函数,它接收一个 多维数组 arr 和它的深度 n ,并返回该数组的 扁平化 后的结果。
多维数组 是一种包含整数或其他 多维数组 的递归数据结构。
数组 扁平化 是对数组的一种操作,定义是将原数组部分或全部子数组删除,并替换为该子数组中的实际元素。只有当嵌套的数组深度大于 n 时,才应该执行扁平化操作。第一层数组中元素的深度被认为是 0。
输入
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]]
解释
传递深度 n=0 的多维数组将始终得到原始数组。这是因为 子数组(0) 的最小可能的深度不小于 n=0 。因此,任何子数组都不应该被平面化。
这道题目的解决方法很多,可以使用reduce或者递归等思想,这里我们主要了解es中的flat方法,
function flatDeep(arr,n) {
return arr.flat(n)
}
如果没有n的限制,arr.flat()里是Infinity(无限),即 return arr.flat(Infinity)
再将一下flat的原理:
flat()
方法的原理是遍历原数组,对于每个元素,如果它是一个数组,就按照指定的深度递归地调用 flat()
方法;如果它不是数组,就直接将其包含在新数组中。这个过程会根据 depth
参数的值重复进行,直到达到最深层或者已经处理完所有嵌套。