数组扁平化

文章介绍了如何使用ES6的flat函数以及通过reduce和递归方法实现数组的扁平化。示例代码展示了不同深度的扁平化处理,包括当深度为无穷大时的处理策略。
摘要由CSDN通过智能技术生成

数组扁平化 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值