如何计算数字和数学运算符的数组(或字符串)

我正在制作一个计算器并按下/保存所有数字和操作符,点击一个数组和一个字符串。

我想知道在这种情况下哪种方法 最好 。 从输入中创建一个字符串或数组或者是一个我想不到的更好的方法。

我想计算数组或字符串。 该字符串给出了错误的答案,我不知道如何计算数组。 演示计算器如下。

$(document).ready(function(){ var inputArr = []; var inputStr = ''; $('span').click(function(){ $('#input').append($(this).text()); //push to inputArr inputArr.push($(this).text()); //add to inputStr inputStr += $(this).text(); }); //Get result $('.equals').click(function(){ $('#result').text(inputArr); $('#result').append("
" + parseInt(inputStr)); }); $('.clear').click(function(){ // clear everything $('#input').text(''); inputArr = []; inputStr = ''; }); });
 span { background: #bbb; border-radius: 2px; margin: 5px; padding: .5em; cursor: pointer; } .equals{ width: 30%; background: #bbb; border-radius: 2px; margin: 15px; padding: .5em; cursor: pointer; text-align: center; font-size: 1.5em; } 
  1 2 3 4 5 

6 7 8 9 0

+-*/clear

=

我尝试使用parseInt(inputStr)但它给出了错误的答案。

此函数采用字符串表达式或创建表达式的字符数组。

 function calculate(expression) { "strict mode"; if (Array.isArray(expression)) expression = expression.join(""); var allowedChars = "1234567890%^*()-+/. "; for (var i = 0; i < expression.length; i++) if (allowedChars.indexOf(expression.charAt(i)) < 0) throw new Error("Invalid expression: unexpected '" + expression.charAt(i) + "' in '" + expression + "'"); return eval(expression); } try { alert(calculate("4+4")); alert(calculate([7, "+", 9, "/", 34])); alert(calculate("45/3")); alert(calculate("100 * cheeseburger")); } catch (e) { alert(e.message); } 

parseInt不会使用数学运算来计算字符串。 eval会这样做。 如果您担心使用eval的安全性,则必须编写一个计算器函数来解析字符串并遵守操作顺序(更复杂的任务)。 我认为没有理由保持数组和字符串。 要么就足够了。

最少修改的工作代码段:

 $(document).ready(function(){ var inputStr = ''; $('span').click(function(){ $('#input').append($(this).text()); //add to inputStr inputStr += $(this).text(); }); //Get result $('.equals').click(function(){ // or however you want to format it $('#result').text(inputStr + ' = ' + eval(inputStr)); }); $('.clear').click(function(){ // clear everything $('#input').text(''); $('#result').text(''); inputArr = []; inputStr = ''; }); }); 
 span { background: #bbb; border-radius: 2px; margin: 5px; padding: .5em; cursor: pointer; } .equals{ width: 30%; background: #bbb; border-radius: 2px; margin: 15px; padding: .5em; cursor: pointer; text-align: center; font-size: 1.5em; } 
  1 2 3 4 5 

6 7 8 9 0

+-*/clear

=