在没有eval()的情况下在javascript中添加/分割/乘以数组和运算符

时间:2016-02-04 07:32:27

标签: javascript arrays eval calculator equation

我正在制作一个计算器。挑战不是使用eval()。我从所有输入中创建了一个数组:

numbers = [1,1,'+',2,'*',3,'-','(',4,'*',5,'+',2,'/',5,')'];

然后我将这个数组转换为字符串,删除,我得到一个这样的字符串:

numberString = "11+2*3-(4*5+2/5)";

所以我的问题是,在不使用eval()的情况下正确计算此等式的结果的方法是什么?

2 个答案:

答案 0 :(得分:0)

使用此,



function notEval(fn) {
  return new Function('return ' + fn)();
}
numbers = [1, 1, '+', 2, '*', 3, '-', '(', 4, '*' , 5, '+', 2,' /', 5, ')'];
console.log( numbers.join('') + ' = ' +  notEval(numbers.join('')) );




Courtesy

答案 1 :(得分:0)

使用对象将操作符字符串映射到实现操作符的函数。

var operators = {
    '+': function(x, y) { return x + y; },
    '-': function(x, y) { return x - y; },
    '*': function(x, y) { return x * y; },
    '/': function(x, y) { return x / y; }
};

(函数应该将状态推送到堆栈,)应该弹出堆栈。