55

如果我有一个数学方程的字符串,我想拆分它然后计算它。我知道我可以使用 eval() 函数来执行此操作,但我很感兴趣是否有其他方法可以执行此操作 - 特别是首先拆分字符串。所以我有类似的东西

var myString = "225 + 15 - 10"
var newString = myString.split(" ");

这会将 myString 变成一个数组:

["225", "+", "15", "-", "10"];

我的下一个任务是将所有奇数字符串转换为整数,我想我可以使用 parseInt(); 为了。我的问题是,如何将“+”和“-”变成实际的算术运算符?所以最后我留下了一个我可以计算的数学表达式?

这可能吗?

4

3 回答 3

93
var math_it_up = {
    '+': function (x, y) { return x + y },
    '-': function (x, y) { return x - y }
}​​​​​​​;

math_it_up['+'](1, 2) == 3;
于 2012-10-25T21:59:22.210 回答
86

Oliver Morgan 在评论中提到了JavaScript 的eval功能,我只是想说明如何将eval其用作解决问题的方法。

eval函数接受一个字符串,然后返回该字符串的值,该字符串被视为数学运算。例如,

eval("3 + 4")

将返回 7 作为 3 + 4 = 7。

这对您的情况很有帮助,因为您有一个字符串数组,您希望将其视为数学运算符和它们所代表的操作数。

myArray = ["225", "+", "15", "-", "10"]; 

无需将数组中的任何字符串转换为整数或运算符,您就可以编写

eval(myArray[0] + myArray[1] + myArray[2]);

这将转化为

eval("225" + "+" + "15");

这将转化为

eval("225 + 15");

这将返回 240,即 225 与 15 相加的值。

或者更通用:

eval(myArray.join(' '));

这将转化为

eval("225 + 15 - 10");

这将返回 230,将 15 加到 225 并减去 10 的值。因此,您可以看到,在您的情况下,可以跳过将数组中的字符串转换为整数和运算符,正如 Oliver Morgan 所说,只是eval它。

于 2014-10-24T15:19:17.620 回答
0

考虑将isNaN(Number(array[x]))and aswitch用于不满足条件的任何内容。

于 2012-10-25T22:00:04.800 回答