在 javascript 中添加/除/乘数组中的数字和运算符而不使用 eval()
adding / dividing / multiplying numbers and operators from array in javascript without eval()
我正在制作一个计算器。挑战是不使用 eval()
。我从所有输入中创建了一个数组,如下所示:
numbers = [1,1,'+',2,'*',3,'-','(',4,'*',5,'+',2,'/',5,')'];
然后我将此数组转换为字符串,删除 ,然后我得到如下字符串:
numberString = "11+2*3-(4*5+2/5)";
所以我的问题是,如何在不使用 eval()
的情况下正确计算这个方程的结果?
使用这个,
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.
使用对象将运算符字符串映射到实现该运算符的函数。
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; }
};
(
函数应将状态压入堆栈,)
应弹出堆栈。
我正在制作一个计算器。挑战是不使用 eval()
。我从所有输入中创建了一个数组,如下所示:
numbers = [1,1,'+',2,'*',3,'-','(',4,'*',5,'+',2,'/',5,')'];
然后我将此数组转换为字符串,删除 ,然后我得到如下字符串:
numberString = "11+2*3-(4*5+2/5)";
所以我的问题是,如何在不使用 eval()
的情况下正确计算这个方程的结果?
使用这个,
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.
使用对象将运算符字符串映射到实现该运算符的函数。
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; }
};
(
函数应将状态压入堆栈,)
应弹出堆栈。