JavaScript文本数组元素匹配函数返回异常问题修复咨询
修复你的文本匹配函数问题
我一眼就看出你这个函数的两个关键问题啦,咱们一步步来改:
问题分析
- 循环提前终止:你在循环的第一次迭代里,不管第一个单词匹配不匹配都直接
return了——如果第一个单词不匹配,直接返回'no words',后面的word2、word3根本没机会被检查到! - 匹配逻辑搞反:你写的是
el.includes(text),这是在判断「单词里是否包含输入文本」,但咱们要的是「输入文本里是否包含单词」,应该反过来写成text.includes(el)才对。
修复后的代码
exports.words = (text) => { const words = [ 'word1' , 'word2' , 'word3' , 'word4' ]; for (let i = 0; i < words.length; i++) { const el = words[i]; // 纠正匹配逻辑:检查输入文本是否包含当前单词 if(text.includes(el)){ // 匹配到就返回当前单词,逻辑没问题 return el; } // 这里去掉else return!否则循环只执行一次就结束了 } // 遍历完所有单词都没匹配到,再返回no words return 'no words'; }
额外优化(可选)
如果想让代码更简洁,也可以用数组的find方法,一行搞定匹配逻辑:
exports.words = (text) => { const words = [ 'word1' , 'word2' , 'word3' , 'word4' ]; // find会返回第一个匹配的元素,找不到就返回undefined const matchedWord = words.find(el => text.includes(el)); return matchedWord || 'no words'; }
这样修改后,不管输入文本包含数组里的哪一个单词,都会正确返回对应的匹配项;如果都不包含,才返回'no words'。
内容的提问来源于stack exchange,提问作者dumpAndDie
相关产品推荐
相关产品推荐

