2012-10-25 58 views
23

如果我有一个字符串是一个数学公式,我想将其拆分并计算出来。我知道我可以使用eval()函数来做到这一点,但我很感兴趣,如果有另一种方法来做到这一点 - 特别是首先分割字符串。所以,我有类似如何将字符串转换为javascript中的数学运算符

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

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

这可能吗?

+0

丑陋的方式将是多个if语句。 – keyser

+2

做一个真正的解析器,否则这个练习是毫无意义的:)这是一篇很好的文章http://parsingintro.sourceforge.net/ – Esailija

+0

除非你有一个特殊的原因,只是'eval'它。 –

回答

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

math_it_up['+'](1, 2) == 3; 
+0

+1 - 这个很漂亮。 – insertusernamehere

+0

嗨,谢谢你。这将工作 - 但如果整个字符串是由用户输入?所以我不能控制字符串内的数字。换句话说,如果这是一个计算器,并且用户在“225 + 15 - 10”中打出拳头,那么我会将字符串分开,并将数字和运算符都转换为数学表达式。在您提供的解决方案中 - 我将如何自动替换x和y - 不是手动定义它们? – user1775598

+0

通常我会去解析器的方向(上面提到的@Esailija),但问题中提供的上下文使这是一个很好的,简单的解决方案。编辑:为了完全控制用户输入,编写一个解析器。 – psema4

0

考虑使用isNaN(Number(array[x]))和任何不符合条件的switch

33

JavaScript的eval函数在Oliver Morgan的评论中提到,我只是想清除如何使用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.所以你可以看到,在你的情况下,可能会跳过将数组中的字符串转换为整数和运算符,正如奥利弗摩根所说,它只是eval它。

+0

我想在表单验证中使用一些“mathy”表达式,解析器只是矫枉过正。使用'eval()',我可以简单地解析一些字符串,例如'<| oh'以进行验证(其中'oh'引用另一个表单输入类/ id /等)。 – pspahn

+1

但是不要太多地使用eval()。有几个原因: https://24ways.org/2005/dont-be-eval –

+0

切勿使用eval。为了任何东西。这是JS中的一个巨大的安全漏洞。 – Daut

相关问题