如何使用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
相关产品推荐
相关产品推荐

