数组扁平化 flat 函数的实现, 两个参数 数组nums, 展开层数deepth
es6提供了api
const flats = (nums, deepth) =>{
return nums.flat(deepth);
}
使用reduce
let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
function fn(arr){
return arr.reduce((prev,cur)=>{
return prev.concat(Array.isArray(cur) ? fn(cur) : cur)
},[])
}
console.log(fn(arr))
不使用reduce(递归)
思路:遍历数组,如果数组内部出现数组,进行递归操作,直到不是数组类型或者层数达到所给参数的阈值,加入到答案数组中。
/**
* @description: 递归解决 数组扁平化flat
* @param {*} nums
* @param {*} deepth
* @return {*}
*/
function flat1(nums, deepth = 1){
// 如果是 无穷大,默认20层
if(deepth === Infinity){
deepth = 20;
}
// 校验参数
if(deepth <= 0){
return nums;
}
const result = [];
function flats(arr, deep){
arr.forEach(element => {
// 控制递归条件
if(Array.isArray(element) && deep > 0){
flats(element, deep - 1);
}else{
result.push(element)
}
});
}
flats(nums,deepth)
return result;
}