Object Lookup方法在JS中非常流行,可以更好地替代Switch-case语句,例如:
function phoneticLookup(val) {
var result = "";
switch(val) {
case "alpha":
result = "Adams";
break;
case "bravo":
result = "Boston";
break;
case "charlie":
result = "Chicago";
break;
}
return result;
}
function phoneticLookup(val) {
var result = "";
var lookup = {
"alpha": "Adams",
"bravo": "Boston",
"charlie": "Chicago",
};
result = lookup[val];
return result;
}
但是如果switch的情况像下面这样,你可以看到多个case返回相同的结果。我们如何用objects
,map
,或者其他任何方式(不使用if-else
)在JS中更好地编写它呢?
let continent = '';
switch (country) {
case "China":
case "India":
case "Nepal":
continent = 'Asia';
break;
case "UK":
case "France":
case "Poland":
continent = 'Europe';
break;
case "Egypt":
case "Zimbave":
case "Somalia":
continent = 'Africa';
break;
default:
continent = 'Other'
break;
}
4条答案
按热度按时间zengzsys1#
我建议不要引入任何抽象。你可以通过把你的 switch 隐藏在一个函数中来使它起作用(不需要看函数的内部)。
在您已经拥有的基础上,唯一的建议是使用
return
,而不是变异一个var然后中断。svdrlsy42#
你有几个选择。pattern matching propsal是第一阶段,可能永远不会成为标准。你可以像this answer那样写一个自定义的switch/match函数。对于这个特定的情况,你实际上可以使用对象查找,只是有点不同:
kjthegm63#
为了提高性能,我建议定义一个重复大陆的Map:
输出量:
为了更容易定义Map,您可以像@Zac Anger那样做,然后在使用之前通过编程反转Map一次。
gfttwv5a4#
如果您想坚持使用您的对象查找版本,最简单的方法之一就是创建一个以国家为值、以洲为键的对象。然后动态创建一个以洲为值、以国家为键的对象。
现在作为
countryContinent
对象看起来像这样:你可以在上面自由使用你的
phoneticLookup
函数。