如何优雅地判断输入的两个运算符(仅限于+-*/)的优先级?

2017-01-22 18:50:49 +08:00
 fourstring

两个运算符以string形式输入

3235 次点击
所在节点    JavaScript
13 条回复
fourstring
2017-01-22 19:08:38 +08:00
目前想了一个比较蛋疼的实现方式
https://gist.github.com/fourstring/081234390c4e31ad1fd48ea46d04385d
Fzzf
2017-01-22 19:23:21 +08:00
table ,然后直接查表
linboki
2017-01-22 19:25:09 +08:00
二维数组
hst001
2017-01-22 20:05:32 +08:00
逆波兰表达式,遇到*/就出栈计算
fourstring
2017-01-22 21:04:47 +08:00
@hst001 我就是在参考 https://zh.wikipedia.org/zh-hans/%E8%B0%83%E5%BA%A6%E5%9C%BA%E7%AE%97%E6%B3%95
实现中缀式转逆波兰式。。。
steel1990
2017-01-22 21:12:36 +08:00
给每个运算符指定一个数字,然后比较数字大小,多简单
xjp
2017-01-22 21:17:01 +08:00
直接构造一个 map 记录每个操作符权值 然后相减啊

```js
function compare(op1, op2){
var weightMap = {"x":1, "/":1, "+":0 ,"-":0 };
return weightMap [op1] - weightMap [op2];
}
```
fourstring
2017-01-22 21:18:03 +08:00
@xjp 是在下输了
zhidian
2017-01-22 21:35:56 +08:00
写好测试例子,然后 eval 不就可以了。比如:

> eval("1"+"+"+"2"+"*"+"3")
7

说明是 * 优先级高。
erlanye
2017-01-22 21:58:10 +08:00
if else(或 switch case),没有比这个更优雅的了,上面的回复都是画蛇添足。
hxsf
2017-01-22 22:09:07 +08:00
在学编译原理?

定义个 运算优先级表
noNOno
2017-01-23 18:59:43 +08:00
skyitachi
2017-01-24 09:41:19 +08:00
@Fzzf 和 @erlanye 都是可以的。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/336278

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX