如何在javascript中将字符串转换为数学运算符

All*_*n S 41 javascript

如果我有一个数学方程式的字符串,我想拆分然后计算它.我知道我可以使用eval()函数来做到这一点,但我很感兴趣,如果有另一种方法可以做到这一点 - 特别是首先拆分字符串.所以我有类似的东西

var myString = "225 + 15 - 10"
var newString = myString.split(" ");
Run Code Online (Sandbox Code Playgroud)

这会将myString变成一个数组:["225","+","15"," - ","10"];

我的下一个任务是将所有奇数编号的字符串转换为整数,我认为我可以使用parseInt(); 对于.我的问题是,如何将"+"和" - "转换为实际的算术运算符?所以最后我留下了一个我可以计算的数学表达式?

这可能吗?

jra*_*jav 74

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

math_it_up['+'](1, 2) == 3;
Run Code Online (Sandbox Code Playgroud)

  • +1-这很漂亮。 (3认同)

Ben*_*ant 55

JavaScript的eval函数,由奥利弗·摩根的评论中提及,我只是想冲出你可以如何使用eval作为解决您的问题.

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

eval("3 + 4")
Run Code Online (Sandbox Code Playgroud)

将返回7为3 + 4 = 7.

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

myArray = ["225", "+", "15", "-", "10"]; 
Run Code Online (Sandbox Code Playgroud)

不将数组中的任何字符串转换为可以编写的整数或运算符

eval(myArray[0] + myArray[1] + myArray[2]);
Run Code Online (Sandbox Code Playgroud)

这将转化为

eval("225" + "+" + "15");
Run Code Online (Sandbox Code Playgroud)

这将转化为

eval("225 + 15");
Run Code Online (Sandbox Code Playgroud)

这将返回240,将值225添加到15.

或者甚至更通用:

eval(myArray.join(' '));
Run Code Online (Sandbox Code Playgroud)

这将转化为

eval("225 + 15 - 10");
Run Code Online (Sandbox Code Playgroud)

这将返回230,增加15到225和减去10的值.所以你可以看到,在你的情况下,可以跳过将数组中的字符串转换为整数和运算符,正如Oliver Morgan所说的那样eval.

  • 但不要过多使用 eval()。原因有很多:https://24ways.org/2005/dont-be-eval (5认同)
  • 切勿使用评估。为了任何东西。这是 JS 中一个巨大的安全漏洞。 (2认同)
  • 尽管功能强大,但不要使用 eval https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval (2认同)
  • 如果输入来自用户,这可能会很危险 (2认同)