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

IT技术 javascript
2021-01-24 17:17:18

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

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

这会将 myString 转换为数组:

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

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

这可能吗?

3个回答
var math_it_up = {
    '+': function (x, y) { return x + y },
    '-': function (x, y) { return x - y }
}​​​​​​​;

math_it_up['+'](1, 2) == 3;
嗨,谢谢。这会起作用 - 但如果整个字符串是由用户输入的怎么办?所以我无法控制字符串中的数字是什么。换句话说,如果这是一个计算器并且用户输入“225 + 15 - 10”,我将字符串拆分,然后取出数字和运算符并将它们转换为数学表达式。在您提供的解决方案中 - 我将如何自动替换 x 和 y - 而不是手动定义它们?
2021-03-17 17:17:18
通常我会去解析器的方向(上面由@Esalija 提到),但问题中提供的上下文使它成为一个很好的、简单的解决方案。编辑:要完全控制用户输入,请编写解析器。
2021-03-19 17:17:18
如果+-与数字交替,您可以简单地循环遍历它。
2021-03-28 17:17:18
@ user1775598,有几种方法可以做到。一种方法是简单地遍历字符串并检查每个元素的 math_it_up 对象上的 hasOwnProperty;如果为真,则使用数组中的前后索引作为函数的参数来调用它。当然,你还可能需要验证,这些指标存在且有效的数字...你还需要尊重优先规则,如果你扩展,以/*......更复杂的您在本更强大,它离解析器越近。
2021-04-11 17:17:18

evalOliver Morgan 在评论中提到了JavaScript 的功能,我只是想弄清楚如何使用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此而已。

永远不要使用 eval。为了任何东西。这是 JS 中一个巨大的安全漏洞。
2021-03-16 17:17:18
但是不要过多地使用 eval()。原因有很多:24ways.org/2005/dont-be-eval
2021-03-25 17:17:18
如果输入来自用户,这可能很危险
2021-03-29 17:17:18
虽然功能强大,但不要使用 eval developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-04-02 17:17:18
我正在考虑在表单验证中使用一些“数学”表达式,而解析器只是矫枉过正。使用eval()允许我简单地解析一些字符串,例如<|oh用于验证(其中oh引用另一个表单输入类/id/等)。
2021-04-13 17:17:18

考虑对不满足条件的任何东西使用isNaN(Number(array[x]))and a switch