js手写题手撸flat

本文介绍了一种自定义的数组扁平化方法,通过myFlat函数处理不同层级的嵌套数组,适用于处理无限层级的数据。核心展示了递归思想的应用和优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数组flat

        const newArr = [1, 2, 3, [4, 5, [8, [9]]], [6, 7, [0]]];
        // 手撸flat
        /**
         * prop:Number处理的层级
         */
        Array.prototype.myFlat = function (prop = 1) {
            if (typeof (prop) !== 'number') {
                throw new TypeError('prop need Number');
            }
            const that = this;
            if (!Array.isArray(that)) {
                throw new TypeError('Data type is not Array');
            }
            let target = [];
            // 当输入数据为无穷大时
            if (prop === Infinity) {

                target = that;
                
                do{

                  target = target.myFlat(1);

                }while(target.some(d=>Array.isArray(d)));

                return target
            }
            if (prop <= 0) return that;
            // 优化执行次数,当已经全部扁平 就不再走下面的逻辑
            if (that.every(i => !Array.isArray(i))) return that;

            prop--;

            that.forEach(item => {

                if (Array.isArray(item) && item.some(t => Array.isArray(t))) {
                    
                    target = target.concat(item.myFlat(prop));

                } else if (Array.isArray(item)) {

                    target = target.concat(item.myFlat(1))

                } else {

                    target.push(item)
                }
            })
            return target
        }
        console.log(newArr.myFlat(8)); 

2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值