JavaScript字符串转数组后查找最长单词的代码问题求助
现有代码错误排查
str.split(" ")方法不会修改原字符串,会返回拆分后的单词数组,你没有接收这个返回值,后续代码操作的还是原始字符串,遍历的是每个单个字符而非单词- for循环的遍历边界错误,就算你拿到了单词数组,也应该用数组的长度作为遍历上限,而非原字符串的长度
- counter变量逻辑冗余,每次循环都初始化为0后再累加当前元素长度,等效于直接取当前元素的length属性,无需额外定义该变量
修正后的可运行代码
function findLongestWordLength(str) { let result = 0; const wordArr = str.split(" "); // 接收拆分后的单词数组 // 遍历单词数组而非原字符串 for(let i = 0; i < wordArr.length; i++) { const currentLen = wordArr[i].length; // 直接取当前单词长度 if(currentLen > result) { result = currentLen; } } return result; }
更简洁的实现方案
方案1:Math.max + 数组map
直接通过链式调用完成转换和取值,代码更精简:
function findLongestWordLength(str) { return Math.max(...str.split(' ').map(word => word.length)) }
逻辑说明:先把字符串拆成单词数组,用map把每个单词转为对应长度,再把长度数组展开传入Math.max获取最大值。
方案2:数组reduce方法
用reduce累积最长长度,不需要额外定义变量存储结果:
function findLongestWordLength(str) { return str.split(' ').reduce((maxLength, currentWord) => { return Math.max(maxLength, currentWord.length) }, 0) }
逻辑说明:reduce的初始值设为0,每次遍历单词时,对比当前累计的最大长度和当前单词长度,返回更大的那个作为新的累计值,遍历结束后直接拿到最终结果。
内容的提问来源于stack exchange,提问作者CG-180
相关产品推荐
相关产品推荐

