您好,请帮我解决这个问题
var str = '10+20-10-2';
var numbers = str.replace(/ /g, '').split(/[-+*\/]/g);
var operators = str.replace(/ /g, '').split(/\d*/g);
operators.shift();
var result = +numbers[0];
for (var i = 0; i < operators.length - 1; i++) {
result = eval( result + operators[i] + numbers[i + 1] );
}
alert(result);
上面的代码工作正常,但是当我尝试传递一些其他输入时,例如
var str = '-(1)-(-2)';
var str = '-1-(-1)';
var str = '(-1)-2' ;
没有得到任何结果
最佳答案
我想在你的情况下,除了 eval 之外,你还可以使用
var result = parseFloat(numbers[0]);
因此
result = eval( result + operators[i] + parseFloat(numbers[i + 1]))
这更可靠一些,因为只有当数字中的字符串确实包含数字时它才起作用,如果不包含数字,则会返回NaN
。另外,为了更加可靠,您可以使用 switch
指令:
switch(operators[i])
{
case "+":
etc.
}
当然,您的解决方案更优雅,但由于它由于某种原因不起作用,这可能会帮助您发现它。在您中,我还会使用几个 alert()
函数检查这些拆分数组的实际内容。有时正则表达式不会产生您期望的输出。
关于javascript - 括号内的算术运算 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475087/