如何实现统计字符串中不同单词数量的方法?
统计字符串中不同单词的数量的实现方法
最简洁实现:利用Set自动去重
Set是专门存储唯一值的数据结构,能直接帮你过滤重复元素,快速实现需求:
function countUniqueWords(str) { // 去除首尾空白后,按任意数量的空白字符分割成单词数组 const words = str.trim().split(/\s+/); // 转成Set去重,返回Set的大小就是唯一单词数 return new Set(words).size; }
处理大小写、标点的进阶版本
如果需要忽略大小写(比如"Hello"和"hello"算同一个),或者过滤单词里的标点,可以先做预处理:
function countUniqueWords(str) { // 转小写后,用正则匹配单词(支持带撇号的单词,比如don't) const words = str.toLowerCase().match(/\b[\w']+\b/g) || []; return new Set(words).size; }
手动实现去重(兼容旧环境)
如果不能用Set,用对象记录已出现的单词也能实现:
function countUniqueWords(str) { const words = str.trim().split(/\s+/); const seenWords = {}; let uniqueCount = 0; for (const word of words) { // 单词未被记录过,就标记并计数+1 if (!seenWords[word]) { seenWords[word] = true; uniqueCount++; } } return uniqueCount; }
补充说明
你之前用map遍历的思路不对——map的作用是转换数组元素,不是用来比较元素是否重复。要实现去重统计,直接遍历+记录已出现元素,或者用Set才是更高效的方式。
内容的提问来源于stack exchange,提问作者Robert L.
相关产品推荐
相关产品推荐

