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

JavaScript多并列高频单词查找功能实现求助

解决捕获所有并列最高频单词的问题

嘿,我来帮你搞定这个问题!你的代码确实在处理多个高频单词的时候逻辑绕了弯路,而且效率也有点低,咱们来一步步分析并修正它。

原代码的问题分析

你的思路方向是对的,但几个环节的处理导致无法正确捕获所有并列高频单词:

  • 效率冗余:在forEach里每次调用filter统计单个单词的次数,相当于对整个数组做了n次遍历(n是单词总数),时间复杂度是O(n²),字符串越长越慢。
  • 逻辑混乱:处理maxWord时反复拼接字符串、转数组、用Set去重,不仅容易出错,还会因为同一个单词被多次遍历到(比如示例里的she)而重复执行去重操作,逻辑非常冗余。
  • 初始值隐患:maxWord初始为空字符串,当第一个高频单词出现后,后续添加并列单词时的拼接逻辑很容易引入不必要的空格或重复值。

简单可行的解决方案

我们换一种更清晰高效的思路:先一次性统计所有单词的出现次数,再找出最大次数,最后收集所有达到这个次数的单词。这样既避免了冗余操作,也能准确获取所有并列高频单词。

改进后的代码

let str = "She she sells sea shells down by the sea shore boop seasalt";

function commonWords() {
  if (str.length === 0) {
    return null;
  }
  
  // 统一转小写并分割为单词数组
  const words = str.toLowerCase().split(" ");
  
  // 统计每个单词的出现次数(用对象存储,键是单词,值是次数)
  const wordCounts = {};
  words.forEach(word => {
    // 如果单词已存在则次数+1,否则初始化为1
    wordCounts[word] = (wordCounts[word] || 0) + 1;
  });
  
  // 找出所有单词中的最高出现次数
  const maxCount = Math.max(...Object.values(wordCounts));
  
  // 筛选出所有出现次数等于最高次数的单词
  const maxWords = Object.keys(wordCounts).filter(word => wordCounts[word] === maxCount);
  
  console.log(maxWords); // 输出: ["she", "sea"]
  return maxWords;
}

commonWords();

代码说明

  1. 统计次数:只用一次遍历就完成所有单词的计数,时间复杂度降到O(n),效率大幅提升。
  2. 获取最大次数:利用Math.max结合对象的values方法,快速找到最高出现次数。
  3. 筛选高频单词:通过filter方法从统计结果中挑出所有次数等于最大值的单词,直接得到完整的并列高频单词列表,完全不需要用Set去重——因为每个单词在统计结果里只出现一次。

测试结果

运行这段代码,针对你提供的示例字符串,会输出["she", "sea"],这两个单词都出现了2次,是文本中使用次数最多的单词,完全符合需求。

内容的提问来源于stack exchange,提问作者Chase Miller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:12:38