举例:
用户输入字符串1+1×2-2÷1,需要计算出结果
分析:
1,在支持eval的环境中只需要replace用户输入的+-×÷为js运算符关键词+ -*/,然后传入eval函数中就可以得到结果
2,不支持eval的环境,比如微信小程序,有如下几个问题:
(1)一次只能进行加减乘除的任一计算
(2)需要把非运算符的字符串独立拆出来,并转为number
(3)处理逐一运算造成的,对运算优先级的不支持,比如1+1*2=3,逐一运算的结果却是4
处理思路:
代码不方便贴,这里只列出已经走通的处理逻辑
(可以用微信扫文章底部小程序码,查看此逻辑实现后的效果)
实现细节不外乎就是循环判断累计:
‘1+1 × 2 - 2 ÷ 1’
[1,+,1, ×, 2, -, 2, ÷, 1]
[1,+,[1, ×, 2], -, [2, ÷, 1]]
[1,+,2, -,2]
1