您的选择基本上是:
- 那
if
/else
你不想做
- A
switch
结合if
/else
我试图提出一个合理的查找地图选项,但它很快就变得不合理。
我会去#1,它不是那么大:
if (res.distance == 0) {
word = 'a';
} else if (res.distance == 1 && res.difference > 3) {
word = 'b';
} else if (res.distance == 2 && res.difference > 5 && String(res.key).length > 5) {
word = 'c';
} else {
word = 'd';
}
如果所有的大括号和垂直尺寸都困扰着你,没有它们它几乎和条件运算符版本一样简洁:
if (res.distance == 0) word = 'a';
else if (res.distance == 1 && res.difference > 3) word = 'b';
else if (res.distance == 2 && res.difference > 5 && String(res.key).length > 5) word = 'c';
else word = 'd';
(我不是在提倡,我从不提倡放弃括号或将语句if
放在同一行,但其他人有不同的风格观点。)
在我看来,#2 更笨重,但这可能更像是一种风格评论:
word = 'd';
switch (res.distance) {
case 0:
word = 'a';
break;
case 1:
if (res.difference > 3) {
word = 'b';
}
break;
case 2:
if (res.difference > 5 && String(res.key).length > 5) {
word = 'c';
}
break;
}
最后,我并不是在提倡这一点,您可以利用 JavaScript在B语法语言家族switch
中不常见的事实:语句可以是表达式,并与源代码顺序中的开关值匹配:case
switch (true) {
case res.distance == 0:
word = 'a';
break;
case res.distance == 1 && res.difference > 3:
word = 'b';
break;
case res.distance == 2 && res.difference > 5 && String(res.key).length > 5:
word = 'c';
break;
default:
word = 'd';
break;
}
那有多丑?:-)