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

如何统计JavaScript对象中不同键值的出现频率?

用Reducer优雅统计JavaScript对象中值的出现频率

针对你需要统计对象数组中各键对应值出现频率的需求,用Array.reduce结合Object.entries就能写出简洁优雅的实现,完全替代手动多层遍历:

实现代码

const input = [
    {"a": "1", "b": "2"},
    {"a": "2", "b": "2"},
    {"a": "2", "b": "2", "c": "2"},
    {"a": "bananas"}
];

const output = input.reduce((acc, currentObj) => {
  // 拆解当前对象的键值对并遍历
  Object.entries(currentObj).forEach(([key, value]) => {
    // 初始化当前键的统计对象(如果不存在)
    if (!acc[key]) {
      acc[key] = {};
    }
    // 更新对应值的计数:存在则加1,不存在则设为1
    acc[key][value] = (acc[key][value] || 0) + 1;
  });
  return acc;
}, {});

console.log(output);
// 输出结果和示例完全一致:
// {
//   "a": {"1": 1, "2": 2, "bananas": 1},
//   "b": {"2": 3},
//   "c": {"2": 1}
// }

代码说明

  • 用reduce作为核心容器,初始值是空对象,用来逐步构建最终的统计结果
  • Object.entries(currentObj)把每个对象的键值对转换成[键, 值]的数组形式,方便遍历
  • 对每个键值对,先确保累加器中存在该键对应的统计对象,再更新值的计数——(acc[key][value] || 0)处理了值第一次出现时计数为0的情况

简化写法(ES2021+)

如果你的环境支持ES2021及以上,可以用空值合并赋值运算符进一步简化初始化逻辑:

const output = input.reduce((acc, currentObj) => {
  Object.entries(currentObj).forEach(([key, value]) => {
    acc[key] ??= {}; // 仅当acc[key]为undefined或null时初始化
    acc[key][value] = (acc[key][value] || 0) + 1;
  });
  return acc;
}, {});

内容的提问来源于stack exchange,提问作者David Ferris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:39:26