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

如何使用Javascript读取文本文件并统计每个单词的出现次数

我把完整的实现方案整理在这里,我自己排查了一个多小时才跑通全流程,希望能帮到有同类需求的开发者。

JavaScript 本地文本文件单词统计完整实现

1. 读取本地文本文件

  • 前端侧可通过FileReaderAPI实现本地文件读取,无需上传到后端,示例代码:
// 假设页面有<input type="file" id="fileInput" accept=".txt">
document.getElementById('fileInput').addEventListener('change', (e) => {
  const file = e.target.files[0]
  if (!file) return
  const reader = new FileReader()
  reader.onload = (event) => {
    const textContent = event.target.result
    // 后续处理逻辑调用
    processText(textContent)
  }
  reader.readAsText(file, 'utf-8')
})

2. 文本内容格式化处理

  • 核心逻辑是用正则清除无效字符,再拆分出纯单词数组,自动过滤空值,还可统一转为小写避免大小写导致的统计误差:
function processText(rawText) {
  // 清除所有非字母、非空格的特殊字符、制表符、换行符,将多段空格统一替换为单个空格
  const cleanedText = rawText.replace(/[^a-zA-Z\s]/g, '').replace(/\s+/g, ' ').trim().toLowerCase()
  // 按空格分割成单词数组
  const wordList = cleanedText.split(' ')
  // 调用统计逻辑
  const countResult = countWords(wordList)
}

3. 统计每个单词的出现次数

  • 用对象或者Map存储统计结果即可,实现简单性能也足够普通场景使用:
function countWords(wordList) {
  const countMap = {}
  wordList.forEach(word => {
    countMap[word] = countMap[word] ? countMap[word] + 1 : 1
  })
  // 调用排序逻辑
  return sortResult(countMap)
}

4. 按降序展示统计结果列表

  • 把统计对象转为数组后调用sort方法排序即可,还可自定义次优先级排序规则:
function sortResult(countMap) {
  // 转为[单词, 次数]格式的数组
  const resultList = Object.entries(countMap)
  // 按次数降序排序,次数相同的按单词字典序升序排列
  resultList.sort((a, b) => {
    if (b[1] !== a[1]) {
      return b[1] - a[1]
    }
    return a[0].localeCompare(b[0])
  })
  // 输出结果,可根据需求渲染到页面或者打印控制台
  console.log('单词统计结果(降序):', resultList)
  return resultList
}

如果你需要统计带数字的字符、或者支持中文单词,只需要调整文本清洗阶段的正则匹配规则即可,不需要修改整体流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:06:03