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

JavaScript统计高频词时数组排序出现重复单词问题

问题原因

出现单词重复的核心问题和排序逻辑无关,是去重逻辑完全失效导致的,具体原因有两点:

  • Set 对于对象这类引用类型的去重判断依据是内存引用地址,而非对象的实际内容。你每次循环执行set.add()时传入的都是新创建的对象字面量,哪怕两个对象的word、count属性完全一致,因为是不同的内存地址,Set会判定为两个不同的值,全部保留,根本没有实现去重效果。
  • 循环遍历的是所有匹配到的单词原始数组arr,没有先对遍历的单词做去重。比如单词love在示例文本中出现了6次,循环就会执行6次添加{word:'love', count:6}对象的操作,最终Set里会存入6个内容完全相同的love统计对象,排序后自然会出现重复条目。

另外原有代码还有个隐含问题:正则匹配开启了忽略大小写模式,但统计时没有统一单词大小写,会导致If和if这类大小写不同的同个单词被判定为两个独立单词统计,结果不准。

修正后代码
const paragraph = `I love teaching. If you do not love teaching what else can you love. I love Python if you do not love something which can give you all the capabilities to develop an application what else can you love.`;
const tenMostFrequentWords = (str) => {
    const regex = /\b[a-z]+\b/gi;
    const wordArr = str.match(regex);
    const frequencyMap = new Map();
    // 单次遍历统计词频,效率更高也不会重复
    for (const word of wordArr) {
        const formatWord = word.toLowerCase();
        frequencyMap.set(formatWord, (frequencyMap.get(formatWord) ?? 0) + 1);
    }
    // 转数组、排序、取前10个高频词
    return Array.from(frequencyMap, ([word, count]) => ({word, count}))
        .sort((a, b) => b.count - a.count)
        .slice(0, 10);
}
console.log(tenMostFrequentWords(paragraph));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:57:11