You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:06:03