zoukankan      html  css  js  c++  java
  • 还原数组

    const parser = require("@babel/parser");
    const traverse = require("@babel/traverse").default;
    
    // 将js代码转换成AST
    // const { parse } = require("@babel/parser");
    // 用来遍历AST中的节点
    // const traverse = require("@babel/traverse").default;
    // AST转换成js
    const generator = require("@babel/generator").default;
    // 用来判断节点类型和生成新的节点
    const types = require("@babel/types");
    
    
    const jscode = `
    
    var a = [1,2,3,[1213,234],{"code":"666"},window];
    b = a[1] + a[2] + a[3];
    c = a[4];
    d = a[5];
    
    `;
    let ast = parser.parse(jscode);
    
    
    
    const replaceArrayElements =
    {//数组还原
        VariableDeclarator(path) {
            let { node, scope } = path;
            let { id, init } = node;
            if (!types.isArrayExpression(init)) return;
    
            const binding = scope.getBinding(id.name);
            if (!binding || !binding.constant) {
                return;
            }
    
            for (let referPath of binding.referencePaths) {
                let { node, parent } = referPath;
                if (!types.isMemberExpression(parent, { object: node }) || !types.isNumericLiteral(parent.property)) {
                    return;
                };
            }
    
            for (let referPath of binding.referencePaths) {
                let { parent, parentPath } = referPath;
                let index = parent.property.value;
                parentPath.replaceWith(init.elements[index]);
            }
            path.remove();
        },
    }
    
    traverse(ast, replaceArrayElements);
    
    
    let { code } = generator(ast);
    
    console.log(code);
  • 相关阅读:
    第八章 采样
    第七章 优化算法
    第六章 概率图模型
    第五章 非监督学习
    第四章 降维
    第三章 经典算法
    第二章 模型评估
    第一章 特征工程-------------《百面机器学习》
    中等-102,107-二叉树的层序遍历
    字符串单模式匹配 暴力+哈希
  • 原文地址:https://www.cnblogs.com/angdh/p/15757916.html
Copyright © 2011-2022 走看看