如何统计对象数组中重复单词的出现次数并合并累加计数值
合并重复word并累加计数的实现方案
现有代码问题
你现有的代码存在以下问题:
- reduce回调没有返回累计值,初始值设为对象但实际操作是往外部data数组插入数据,逻辑不连贯
- 没有对重复word做判断,每次符合过滤条件都新增对象,没有累加计数逻辑
- 代码中计数字段命名为count,和需求要求的c字段不匹配
最优实现
场景1:从输入字符串直接生成目标结果
function words(str) { // 补充isLetter通用实现,你可根据实际需求调整正则规则 function isLetter(str) { return /^[A-Za-z]+$/.test(str); } // 第一步:哈希表统计词频 const wordCount = str.split(' ').reduce((map, word) => { if (word.length > 2 && isLetter(word)) { map[word] = (map[word] || 0) + 1; } return map; }, {}); // 第二步:转为要求的对象数组格式 return Object.entries(wordCount).map(([word, c]) => ({ word, c })); }
场景2:已有初始c:1的对象数组,直接合并去重
function mergeDuplicateWords(arr) { const countMap = arr.reduce((map, item) => { map[item.word] = (map[item.word] || 0) + item.c; return map; }, {}); return Object.entries(countMap).map(([word, c]) => ({ word, c })); } // 测试示例 const originalArr = [ {"word":"Frank","c":1}, {"word":"Irina","c":1}, {"word":"Frank","c":1}, {"word":"Frank","c":1}, {"word":"Thomas","c":1} ]; console.log(mergeDuplicateWords(originalArr)); // 输出:[{"word":"Frank","c":3},{"word":"Irina","c":1},{"word":"Thomas","c":1}]
方案说明
- 采用哈希表做计数中介,单次查找时间复杂度为O(1),整体时间复杂度为O(n),是性能最优的实现,适配任意数据量级
- 无第三方依赖,兼容所有现代JS运行环境
内容的提问来源于stack exchange,提问作者eder
相关产品推荐
相关产品推荐

