统计 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; ?>
】
相关推荐
- Win11怎么设置鼠标宏_Win11鼠标按键自定义
- 如何用::实现工具类方法调用_php静态工具类设计
- Win11怎么关闭用户账户控制UAC_Window
- 如何在Golang中编写异步函数测试_Golang
- Linux怎么禁止Root用户远程登录_Linux
- LINUX怎么查看进程_LINUX ps命令查看运
- Linux如何安装Golang环境_Linux下G
- Python路径拼接规范_跨平台处理说明【指导】
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- 如何在Golang中处理模块冲突_解决依赖版本不兼
- c# 服务器GC和工作站GC的区别和设置
- 如何在Golang中优化文件读写性能_使用缓冲和并
- Python文本编码与解码_跨平台解析说明【指导】
- c++ try_emplace用法_c++ map
- c++的static关键字有什么用 静态变量和静态
- Python大文件处理策略_内存优化说明【指导】
- 如何使用Golang构建简易投票统计功能_Gola
- php中作用域操作符能访问私有静态属性吗_访问权限
- Win10系统怎么查看网络连接状态_Windows
- c++中的CRTP是什么 c++奇异递归模板模式【
- Win11怎样安装微信开发者工具_Win11安装开
- 如何使用正则表达式批量替换重复的“-”模式为固定字
- Win11开机速度慢怎么优化_Win11系统启动加
- Win11怎么快速锁屏_Win11一键锁屏快捷键W
- MAC如何快速搜索大文件_MAC磁盘空间分析与冗余
- php转mp4怎么设置帧率_调整php生成mp4视
- php怎么下载安装后设置默认字符集_utf8配置步
- Win11怎么清理C盘下载文件夹_Win11清理下
- Win10如何卸载WindowsDefender_
- Python函数缓存机制_lru_cache解析【
- Windows10系统怎么查看显卡型号_Win10
- php中::能用于接口静态方法吗_接口静态方法调用
- 当网站SEO排名下降时,如何应对?
- Windows怎样拦截WPS弹窗广告_Window
- TestNG的testng.xml配置文件怎么写
- Win11怎么开启窗口对齐助手_Windows11
- 如何在Golang中处理通道发送接收错误_防止阻塞
- Python字符串操作教程_切片拼接与格式化详解
- php转mp4怎么保留字幕_php处理带字幕视频转
- Win10怎么卸载鲁大师_Win10彻底卸载鲁大师
- VSC怎样在Linux运行PHP_Ubuntu系统
- Win11怎么清理C盘系统日志_Win11清理系统
- 如何在 Go 中正确测试带 Cookie 的 HT
- C++中的constexpr和const有什么区别
- Python网络异常模拟_测试说明【指导】
- Win10电脑怎么设置网络名称_Windows10
- Win11怎么更改系统语言为中文_Windows1
- php中self::能调用子类重写的方法吗_静态绑
- Win11文件扩展名怎么显示_Win11查看文件后
- Windows如何拦截2345弹窗广告_Windo


QQ客服