统计 JavaScript 对象中各属性值的出现频次

技术百科 碧海醫心 发布时间:2026-01-28 浏览:

本文介绍如何遍历对象并统计其所有属性值的出现次数,返回一个以值为键、频次为值的新对象,适用于数据聚合与频次分析场景。

在实际开发中,我们常需对对象中重复出现的值进行频次统计(例如统计用户选择的标签、接口返回的状态码分布等)。给定一个键值任意的对象,目标是忽略键名,仅按值(value)分组计数,最终生成形如 { a: 3, b: 1, c: 2, d: 1 } 的统计结果。

实现的核心思路是:遍历对象的每个自有可枚举属性,提取其值,并在结果对象中对该值进行累加计数。以下是推荐的简洁高效实现:

function countOccurrences(obj) {
  const result = {};

  for (const key in obj) {
    // 确保只处理对象自身的属性(非原型链继承)
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      const value = obj[key];
      // 若 result[value] 已存在则加 1,否则初始化为 0 再加 1
      result[value] = (result[value] ?? 0) + 1;
    }
  }

  return result;
}

使用示例:

const obj1 = {
  1: 'a',
  2: 'b',
  3: 'a',
  4: 'c',
  5: 'a',
  6: 'd',
  7: 'c'
};

console.log(countOccurrences(obj1));
// 输出: { a: 3, b: 1, c: 2, d: 1 }

⚠️ 注意事项:

  • for...in 会遍历所有可枚举属性(包括继承属性),因此建议配合 hasOwnProperty() 或 Object.keys() 使用以确保健壮性;
  • 上述代码使用空值合并操作符 ?? 替代 ||,更安全地处理 falsy 值(如 0、''、false)——若原始对象可能包含这些值作为合法计数目标

    ,推荐此写法;
  • 若需支持 Symbol 键或不可枚举属性,应改用 Object.getOwnPropertyNames() + Object.getOwnPropertySymbols() 组合遍历;
  • 对于超大对象,可考虑使用 Map 提升性能(尤其当值为对象或函数时),但本例中字符串键已足够高效。

总结:该方法轻量、兼容性好(支持所有 ES5+ 环境),是对象值频次统计的标准实践方案。


# 并在  # 适用于  # 需对  # 对象  # javascript  # java  # 值为  # 字符串  # 接口  # 继承  # map  # 状态码  # Object  # 遍历  # 中对  # for  # 键值  # 再加  # symbol  # 形如  # 性好 


相关栏目: <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 AI推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 SEO优化<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 技术百科<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 谷歌推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 百度推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 网络营销<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 案例网站<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 精选文章<?muma echo $count; ?>

相关推荐

在线咨询

点击这里给我发消息QQ客服

在线咨询

免费通话

24h咨询:4006964355


如您有问题,可以咨询我们的24H咨询电话!

免费通话

微信扫一扫

微信联系
返回顶部