Node.js环境下如何将单词统计结果按字母顺序排序
Node.js单词统计结果按字母排序实现方案
你现有代码返回的是存储单词和对应出现次数的普通对象,普通对象本身没有顺序,只需要额外加一步排序逻辑即可,具体实现如下:
核心思路
- 使用
Object.entries()将统计结果对象转换为[单词, 出现次数]格式的二维数组 - 调用数组的
sort()方法,通过localeCompare()实现符合自然语言规则的字母排序 - 可根据需求选择返回排序后的数组,或再转回有序对象
完整修改后代码
const { readFileSync } = require('fs'); // 你的文本文件路径 const file = 'C:\\Users\\eeroj\\source\\repos\\Nodejs\\pish\\pish\\TextFile2.txt'; function countRepeatedWords(sentence) { // split按空格拆分后,可过滤空字符串,按需加toLowerCase统一大小写(不区分大小写统计时使用) const words = sentence.split(" ") .filter(word => word.trim() !== '') // 不需要统一大小写的话删掉下面这行 .map(word => word.toLowerCase()); const wordMap = {}; for (let i = 0; i < words.length; i++) { wordMap[words[i]] = (wordMap[words[i]] || 0) + 1; } // 核心排序逻辑:按单词字母升序排列 const sortedResult = Object.entries(wordMap).sort(([wordA], [wordB]) => { return wordA.localeCompare(wordB); }); // 如果需要返回对象格式,用下面的代码替代上面的返回值(ES2019+支持) // const sortedWordMap = Object.fromEntries(sortedResult); // return sortedWordMap; return sortedResult; } const fileContent = readFileSync(file).toString(); // 输出排序后的统计结果 console.log(countRepeatedWords(fileContent));
补充说明
- 如果需要字母倒序排列,把排序逻辑改成
return wordB.localeCompare(wordA)即可 - 默认区分大小写排序的话,大写字母开头的单词会排在小写字母开头的单词之前,不需要区分就保留
toLowerCase的逻辑 - 排序后返回的数组格式更方便后续处理,比如直接遍历输出单词和次数
内容的提问来源于stack exchange,提问作者Eero Jyrgenson
相关产品推荐
相关产品推荐

