好玩的.实现数组解构赋值

BUG未知...

  function destructuringArray(target, arr, exp) {
            try {
                exp = exp.replace(/((\.{3})?\w+)/g, ($0, $1) => {
                    if (!window.isNaN(+$1[0])) throw ('变量名不能以数字开头');
                    return `"${$1}"`;
                });
                exp = JSON.parse(exp);
            } catch (e) {
                console.log(e);
            }

            function main(target, arr, expArr) {
                expArr.forEach((exp, i) => {
                    let currentValue = arr ? arr[i] : undefined;
                    /* 递归处理 */
                    if (Array.isArray(exp)) {
                        main(target, currentValue, exp);
                        return;
                    };
                    /* 处理展开操作符 */
                    if (exp.startsWith('...')) {
                        if (i !== expArr.length - 1) {
                            throw ('展开运算符,只能在最后一个变量使用');
                        }
                        exp = exp.slice(3);
                        target[exp] = arr.slice(i);
                        return;
                    }
                    target[exp] = arr === undefined ? undefined : currentValue;
                });
            };
            main(target, arr, exp);
        }
        const test = {};
        const data = [1, 2, [3, [4, [5, 6, 7, [8]]]]];
        destructuringArray(test, data, '[a,b,[c,[d,[e,...gg]]]]');
        /**/
        {
            const [a, b, [c, [d, [e, ...gg]]]] = data;

            console.log(
                a === test.a,
                b === test.b,
                c === test.c,
                d === test.d,
                e === test.e,
                gg.toString() === test.gg.toString(),
            );

        }

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值