题目
说起扁平化数组,大家可能第一时间想起内置方法flat,但如果不使用内置方法,如何达到题目的预期要求呢?
思路
看下官方给的示例:
分析题目和示例后,得知:
- 对一个多维数组arr进行扁平化操作,扁平化的程度n是变量
- 若n为0,无需扁平化操作,直接返回
- n大于0时,对于嵌套数组就需要扁平化操作了
- 对于嵌套数组需要递归运算
解题方法
首先确定递归函数的算法逻辑:
- 创建一个递归函数
flattening
,接受nums
和l
作为参数 - 使用
for...of
遍历nums
,判断子元素是数组类型,l>0且l<n
(每递归一次,l-1
),执行递归函数(传递子元素和l-1
作为参数),若子元素非数组且l不满足以上条件,则直接push
进res
数组中。 - 初始化调用
flattening
函数,将arr
和n
作为参数传递进去。 - 最终返回扁平化的结果
res
代码
JavaScript
/**
* @param {Array} arr
* @param {number} depth
* @return {Array}
*/
var flat = function (arr, n) {
if(n === 0) return arr
let res = []
flattening(arr, n)
return res
// 递归
function flattening(nums, l) {
for(item of nums) {
const isFlag = Array.isArray(item)
if(isFlag && l > 0 && l <= n) {
flattening(item, l-1)
} else {
res.push(item)
}
}
}
};