FreeCodeCamp find longest word题目代码运行错误求助
代码错误排查
你的代码无法正常运行是因为存在3处语法、逻辑问题:
- 循环条件存在两个错误:一是数组长度属性拼写错误,正确写法是
length,你写成了lentgh;二是循环判断逻辑写反,for循环需要在计数器n小于数组长度时持续遍历,你写的n > arrayString.lentgh会导致循环从初始化后就直接判定不满足条件,根本不会执行循环体内的逻辑。 - 循环内返回逻辑错误:你在
if判断分支里只要遇到比当前记录长度更长的单词就直接return,会让函数直接终止运行,不会遍历完数组剩余的元素,如果后面还有更长的单词就会被漏统计。这里只需要更新记录的最大长度值即可,不需要提前返回。 - 缺少边界兼容:如果传入的字符串没有任何匹配的单词(比如空字符串、全是符号的字符串),
str.match(/\w+/g)会返回null,此时直接访问arrayString[0].length会抛出类型错误,虽然你当前的测试用例不会触发这个问题,但函数需要做兼容处理。
修正后代码
function findLongestWordLength(str) { const wordMatchReg = /\w+/g; const wordList = str.match(wordMatchReg) || []; // 无匹配单词直接返回0 if (wordList.length === 0) return 0; let maxWordLength = wordList[0].length; // 修正循环条件:拼写修正、判断符改为小于 for (let n = 1; n < wordList.length; n++){ if (maxWordLength < wordList[n].length){ // 仅更新最大长度,不提前返回 maxWordLength = wordList[n].length; } } return maxWordLength; } // 测试用例运行 console.log(findLongestWordLength("Thep quick brown fox jumped over the lazy dog")); // 输出结果:6(对应最长单词jumped的字符长度)
内容的提问来源于stack exchange,提问作者Michael Dominguez
相关产品推荐
相关产品推荐

