我正在尝试用javascript构建一个计算器,但我陷入困境,不知道如何继续。每次有人点击1 + 1/2,例如我创建一个数组,推送所有输入的数组,所以在数组上面的情况下将是
[1, "+", 1, "/", 2];
但是,我无法弄清楚如何将此数组转换为实际的数学值。 我想到了循环遍历所有元素 像这样:
for(var i=0; i<arrayCharacters.length ;i++){
if(arrayCharacters[i] != "*" || arrayCharacters[i] != "/" || arrayCharacters[i] != "+" || arrayCharacters[i] != "*"){
arrayNumbers.push(arrayCharacters.slice(0, i));
console.log(arrayNumbers);
}
}
这是非常不完整的,因为我卡住了。任何人都可以帮助我吗?
答案 0 :(得分:4)
var result=eval(arrayCharacters.join(""));
您也可以手动解析表达式,但这需要构建一个树,因为数学不是从从左到右计算。
如果你真的想自己解析它(这比eval好得多),你可以使用一个真正从从左到右的数学符号,所以它更容易解析(正如@Scott建议的那样)。实施:
var stack=[];
var arrayCharacters=[1,2,"/",1,"+"];
for(var i=0;i<arrayCharacters.length;i++){
var char=arrayCharacters[i];
if(typeof char==="number"){
stack.push(char);
continue;
}
var op2=stack.pop()||0;
var op1=stack.pop()||0;
var res;
if(char=="+"){
res=op1+op2;
}
if(char=="-"){
res=op1-op2;
}
if(char=="*"){
res=op1*op2;
}
if(char=="/"){
res=op1/op2;
}
stack.push(res);
}
var result=stack.pop();
数学语法(RPN(1)):
1+2 => 1 2 +
1/2+3 => 1 2 / 3 +
1+2/3 => 1 2 3 / +
(1+2)/3 => 1 2 + 3 /
1/2/3+4/5/6 => 1 2 / 3 / 4 5 / 6 / +
答案 1 :(得分:1)
“eval”功能是您的理想选择。您还可以使用math.js库,它带有强大的表达式解析器。