js通过字符串查找变量并进行计算

例如:

            let height = 9
            let width = 8
            let obj = 'width*height'
            console.log(eval(obj)) //72

不用eval()的函数方法前提下,有没有其他的方法解决?
麻烦大家了,写一下步骤过程,谢谢

阅读 3.3k
3 个回答

如果表达式里没有别的标识符,只要识别出来的都是参数,可以用 /\w+/ 来识别,通过 match() 拿到全部,再通过 Set 来去重(但不保证顺序)

const s = "width * height";
s.match(/\w+/g);

const fn = new Function(...new Set(s.match(/\w+/g)), `return ${s}`);
console.log(fn(3, 5));

如果想要保证顺序,自己写个去重

function distinct(list) {
    const cache = new Set();
    return list.filter(it => {
        if (cache.has(it)) { return false;}
        cache.add(it);
        return true;
    });
}

const s = "width * height + abc * height";
const fn = new Function(...distinct(s.match(/\w+/g)), `return ${s}`);
console.log(fn.toString());
console.log(fn(3, 5, 4));

试过Function 么?

let height = 9;
let width = 8;
let obj = 'width*height';

const exec = new Function('width', 'height', `return ${obj}`);

console.log(exec(width, height));// 72

如果只是四则运算的话可以自己写一个逆波兰表达式解析器,然后把需要用到的变量存在对象里,到时候根据名称去取

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题