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

如何统计对象数组中重复单词的出现次数并合并累加计数值

合并重复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:08