Javascript 为什么我的Switch语句案例不能触发精确的字符串匹配?
转换语句背叛了我。。。下面的switch语句与任何案例都不匹配,而是每次打印Javascript 为什么我的Switch语句案例不能触发精确的字符串匹配?,javascript,node.js,switch-statement,Javascript,Node.js,Switch Statement,转换语句背叛了我。。。下面的switch语句与任何案例都不匹配,而是每次打印default案例 我已经尝试删除默认情况,并在涉及的变量中添加类型检查,但它仍然不匹配。 我甚至手动重新键入了大小写字符串,以确保没有复制粘贴任何错误的字符。删除()字符也无济于事 字符串每次匹配1:1,类型始终为string。这些也是最后剩下的案例。之前还有10例患者,但所有患者均表现良好,并执行了预期的操作 如果有人知道这里出了什么问题,那就太棒了,提前谢谢你 const subUniName = sub.data
default
案例
我已经尝试删除默认情况,并在涉及的变量中添加类型检查,但它仍然不匹配。
我甚至手动重新键入了大小写字符串,以确保没有复制粘贴任何错误的字符。删除()
字符也无济于事
字符串每次匹配1:1,类型始终为string
。这些也是最后剩下的案例。之前还有10例患者,但所有患者均表现良好,并执行了预期的操作
如果有人知道这里出了什么问题,那就太棒了,提前谢谢你
const subUniName = sub.data().university; // Is always one of the cases, f.e.: 'Hochschule Fresenius (Wiesbaden)'
let correctUniName;
console.log('type of raw data: ' + typeof sub.data().university) // Logs string
console.log('type of raw data appended to const (same thing): ' + typeof subUniName) // Logs string
console.log('subUniName: ' + subUniName)
// Update University Name
switch (subUniName) {
case "Hochschule Fresenius (Wiesbaden)":
correctUniName = "Hochschule Fresenius University of Applied Sciences";
break;
case 'Hochschule RheinMain (Wiesbaden und Rüsselsheim)':
correctUniName = "Hochschule RheinMain University of Applied Sciences Wiesbaden Rüsselsheim";
break;
case 'EBS Universität für Wirtschaft und Recht (Wiesbaden, Oestrich-Winkel)':
correctUniName = "EBS Universität für Wirtschaft und Recht";
break;
case 'Hochschule Ruhr West (Mülheim, Bottrop)':
correctUniName = "Hochschule Ruhr West University of Applied Sciences";
break;
case "Duale Hochschule Baden-Württemberg (Stuttgart)":
correctUniName = "DHBW - Duale Hochschule Baden-Württemberg";
break;
case 'Hochschule Augsburg (HSA)':
correctUniName = "Hochschule für angewandte Wissenschaften Augsburg - University of Applied Sciences";
break;
case 'Hochschule Karlsruhe - Technik und Wirtschaft':
correctUniName = "Hochschule Karlsruhe - Technik und Wirtschaft - University of Applied Sciences";
break;
case 'Hochschule Westküste (Heide)':
correctUniName = "";
break;
default:
console.log(sub.data().university + ' not matched')
break;
}
下面是一个实时示例,其中包含由sub.data()返回的相同字符。university
:
以下是终端(运行节点)中输出的屏幕截图:
编辑:
刚刚尝试添加了一行console.log(${subUniName}是否与Hochschule Fresenius(威斯巴登)匹配?${subUniName===“Hochschule Fresenius(威斯巴登)”}`)
一次subUniName
应该返回true的是Hochschule Fresenius(威斯巴登)
但是,它打印了以下内容:
霍克舒勒·费森尤斯(威斯巴登)和霍克舒勒·费森尤斯(威斯巴登)匹配吗?假的
我现在很困惑。subUniName
iststring
的类型,字符完全相同,没有空格或任何东西-我缺少什么
EDIT2:
这是我从sub.data().university
获取的数据实时复制的问题,这些数据存储在一个数组中
对于“解决方案”,您可以尝试使用此映射功能:
// Return correct uni name.
function doUniMapping(uni) {
uni = uni.trim();
return uniMapping.hasOwnProperty(uni) ?
uniMapping[uni]: `University ${uni} not matches.`;
}
console.log(doUniMapping(subUniName));
这里是映射对象:
const uniMapping = {
"Hochschule Fresenius (Wiesbaden)":
"Hochschule Fresenius University of Applied Sciences",
'Hochschule RheinMain (Wiesbaden und Rüsselsheim)':
"Hochschule RheinMain University of Applied Sciences Wiesbaden Rüsselsheim",
'EBS Universität für Wirtschaft und Recht (Wiesbaden, Oestrich-Winkel)':
"EBS Universität für Wirtschaft und Recht",
'Hochschule Ruhr West (Mülheim, Bottrop)':
"Hochschule Ruhr West University of Applied Sciences",
"Duale Hochschule Baden-Württemberg (Stuttgart)":
"DHBW - Duale Hochschule Baden-Württemberg",
'Hochschule Augsburg (HSA)':
"Hochschule für angewandte Wissenschaften Augsburg - University of Applied Sciences",
'Hochschule Karlsruhe - Technik und Wirtschaft':
"Hochschule Karlsruhe - Technik und Wirtschaft - University of Applied Sciences",
'Hochschule Westküste (Heide)':
""
};
下面是一个映射对象的完整工作示例:
我认为你的转换更好
下一次在问题中,插入一段与您的问题相关的代码,使用stackblitz或任何您喜欢的方法
我无法从您的屏幕截图中提取输出字符串,因此您必须自己尝试
编辑:字符串名和“(”之间有一个奇怪的空格字符:“”
下面是一个使用replace
修改代码的工作示例:
我建议您从DB记录中删除该字符
EDIT2:下次使用记事本++之类的文本编辑器可以找到这些奇怪的字符时,请使用以下方法:
请向我们展示“subUniName”的输出示例。确保没有前导或尾随空格-这在进行调试输出时很容易被忽略,但当然会导致任何相等的比较。唯一的解释是,您的字符串不是完全匹配的。但是,由于您没有包含不起作用的情况,因此很难判断问题出在哪里。不要依赖于yo你的眼睛。有许多字符是“非印刷的”--换句话说,如果没有一点帮助,它们不会出现在屏幕上。一些文本编辑器可以提供帮助。我添加了终端输出的屏幕截图,并对每个日志进行了注释,以提高清晰度。据我所知,没有空格,我已经手动重新键入了所有字符串。@Heteric Monkey我使用的是VS代码,什么类型的非pr你在说什么输入字符?我尝试实现你的解决方案,但是它与任何字符串都不匹配。我现在创建一个stackblitz。你可以简单地用你的示例“subUniName”来“Fork”我的无效字符串。如果属性名使用的值与属性名使用的值相同,则映射对象将出现与
开关相同的问题。大小写
值…True,但这是一种更好的映射方式(更紧凑、更灵活)缺少他的stackblitz,我们无法理解他接收到的字符是什么,我们看不到的字符是什么。当我们有了他的stackblitz,我们就会理解。编辑:字符串名称和之间有一个奇怪的空格字符:“”(”。这里是一个修改后的代码工作示例,使用replace
:我建议您从数据库记录中删除该字符。