Codewars 8级JS题目:问候语校验函数代码错误排查求助
排查JavaScript问候词检测函数的错误并修正
原代码存在的问题
- 遍历方式错误:使用
for...in遍历字符串时,实际遍历的是字符串的索引(如"hello"会拿到"0"、"1"这类索引值),完全偏离了「检查字符串是否包含问候词」的需求。 - 拼写错误:判断
salut的分支里写了return trres,属于true的拼写错误,会触发ReferenceError。 - 缺少默认返回值:当输入不包含任何问候词时,函数无返回值,默认返回
undefined,不符合逻辑预期。 - 逻辑偏差:原代码将遍历得到的索引转小写后和问候词对比,完全错误,正确逻辑应为检查输入字符串转小写后是否包含目标问候词。
修正后的代码
function validateHello(greetings) { // 存储所有目标问候词 const targetGreetings = ['hello', 'ciao', 'salut', 'hallo', 'hola', 'ahoj', 'czesc']; // 统一转小写,实现大小写不敏感检测 const lowerInput = greetings.toLowerCase(); // 检查输入是否包含任意一个问候词 return targetGreetings.some(word => lowerInput.includes(word)); }
修正说明
- 用数组集中管理问候词,便于后续维护扩展
- 将输入字符串统一转小写,满足大小写不敏感的要求
- 使用
Array.some()方法简化逻辑:只要输入包含任意一个问候词就返回true,否则返回false - 确保所有分支都有明确的返回值,避免
undefined的情况
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

