javascript - Javascript switch 语句比较让我陷入循环
问题描述
我正在尝试使用 switch 语句将一些缩短的标记转换为完整的单词,上次我这样做了,它奏效了,这次没有那么多。我认为类型有问题,但我不知道如何解决它。奇怪的是,修改器部分可以正常工作,但源部分不能正常工作。
function keyToSource(key)
{
let fullSource, source, modifier;
if(key.includes("-"))
{
modifier = key.substring(key.indexOf("-") + 1, key.length);
source = key.substring(0, key.indexOf("-"));
}
else source = key;
switch(source)
{
case "Bo": fullSource = "Body"; break;
case "Ca": fullSource = "Capture"; break;
case "FA": fullSource = "Forearms"; break;
case "HL": fullSource = "Hindlegs"; break;
case "HS": fullSource = "Hard Shell"; break;
case "IR": fullSource = "Investigation Reward"; break;
case "PB": fullSource = "Palico Bonus"; break;
case "Pl": fullSource = "Plunderblade"; break;
case "SD": fullSource = "Shiny Drop"; break;
case "Ta": fullSource = "Tail"; break;
case "Tr": fullSource = "Track"; break;
default: fullSource = "Error"; break;
}
if(typeof modifier !== 'undefined')
{
switch(modifier)
{
case "C": fullSource += " carve"; break;
case "G": fullSource += "(Gold)"; break;
case "S": fullSource += "(Silver)"; break;
case "W": fullSource += " wound"; break;
default: fullSource = "Error" + fullSource; break;
}
}
return fullSource;
}
console.log(keyToSource("Ta"));
console.log(keyToSource("Ta-C"));
解决方案
您的代码似乎有效。但是,您可以通过将 switch 语句移动到对象中来大量清理逻辑:
function keyToSource(key) {
const k = key.split("-");
const source = {
"Bo": "Body",
"Ca": "Capture",
"FA": "Forearms",
"HL": "Hindlegs",
"HS": "Hard Shell",
"IR": "Investigation Reward",
"PB": "Palico Bonus",
"Pl": "Plunderblade",
"SD": "Shiny Drop",
"Ta": "Tail",
"Tr": "Track"
};
const modifier = {
"C": " carve",
"G": "(Gold)",
"S": "(Silver)",
"W": " wound"
};
return (source[k[0]] || "") + (modifier[k[1]] || "");
}
console.log(keyToSource("Ta"));
console.log(keyToSource("Ta-C"));
console.log(keyToSource("PB"));
console.log(keyToSource("Ta-G"));
console.log(keyToSource("SD-W"));
console.log(keyToSource("HS-C"));
console.log(keyToSource("as- da-sdf")); // test invalid entry
如果这不适合您,请随时发表澄清。
推荐阅读
- java - 默认的 kafkaListenerContainerFactory 是如何工作的
- liferay - LDAPAuth:424 在 Liferay 应用程序 sw360 中访问 LDAP 服务器时出现问题
- arrays - 将错误的引用传递给数组 VBA
- javascript - 什么是本地化最快和可读的文件格式?
- redux-toolkit - 如何从我的组件中获取操作的“{slice}/{action}”值?
- reactjs - 使用 ReactRouter 时如何通过历史推送(无需用户操作)维护回栈
- r - 如果 R 中的两个数据框都存在,如何更新数据框 1(带有数据框 2)中的列值?
- tensorflow - Tensorflow 对象检测中的 Pixel 1 Latency 是什么?
- excel - Excel Web Addin 如何基于用户隐藏工作表并访问 Office 365 中保存 Excel 的文件夹
- python - 长时间运行的 Python 脚本在 PHP 中使用 shell_exec 没有返回任何结果