我正在参加「码上掘金挑战赛」详情请看:码上掘金挑战赛来了!
介绍
数组扁平化在前端的api是十分常见的,我们在许多场景下都需要去进行数组的拍平处理,接下来,我将实际的设计一个数组扁平化处理过程,如果大家有任何疑问和难题都可以评论区留言,我会第一时间解决和处理的。谢谢各位观众老爷的支持。
码上掘金地址
核心讲解
function reduceArr(arr,k) {
let res = []
const main = (level,arr) => {
if(level)
for(let i=0;i<arr.length;i++) {
if(!Array.isArray(arr[i])) res.push(arr[i])
else main(level-1,arr[i])
}
else res.push(...arr)
}
main(k,arr)
return res
}
let res = [1,[2],[3,4,[5,[6]]]]
console.log(reduceArr(res,2))
代码的逻辑看起来比较间接,由于是递归的设计,因此代码比较简短,但是核心的内部设计我将逐步的拆分讲解。
- 设计一个函数,第一个参数是传递的数组,第二个参数是拍平的层数
- 内部设计一个递归函数,并且使用一个数组保存最后的结果
- 递归函数开始判断如果满足拍平的层数后,进行数组的遍历,如果是元素直接添加
- 如果不是元素,持续的递归进入下一层的拍平递归函数中
总结
通过对扁平化的分步讲解,大家肯定对递归的扁平化处理有了很深的见解,后续大家可以亲自在码上掘金动手实践会更加明白其中的设计过程,谢谢各位的观看,有疑问评论区见。