javascript统计数组元素频次最常用方法是遍历加对象或map计数:对象适合基础类型但会隐式转字符串键,map支持任意类型键且不转换、可正确处理nan。

用 JavaScript 统计数组中各元素出现次数,核心是「遍历 + 计数存储」。最常用、清晰且兼容性好的方式是配合 for 或 forEach 遍历,用一个对象(或 Map)记录每个值的频次。
用普通对象统计(适合字符串、数字等基础类型)
对象的键作为元素值,值作为出现次数。注意:对象键会自动转为字符串,所以 1 和 "1" 会被视为相同键;若需严格区分类型,改用 Map。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 遍历数组,对每个元素:
– 若对象中已存在该键,对应值加 1;
– 否则初始化为 1 - 示例代码:
const arr = ['a', 'b', 'a', 'c', 'b', 'a'];
const count = {};
arr.forEach(item => {
count[item] = (count[item] || 0) + 1;
});
console.log(count); // { a: 3, b: 2, c: 1 }
用 Map 统计(推荐,支持任意类型键)
Map 允许任意数据类型(如对象、函数、NaN)作为键,且不会隐式转换,语义更准确,性能也略优。
- 创建空
Map - 遍历数组,用
map.get(key)获取当前计数,用map.set(key, newValue)更新 - 示例代码:
const arr = [1, '1', true, 1, true];
const count = new Map();
arr.forEach(item => {
const current = count.get(item) || 0;
count.set(item, current + 1);
});
// 转为对象方便查看(可选)
Object.fromEntries(count); // { '1': 1, 1: 2, true: 2 }
一行写法:reduce(函数式风格)
用 reduce 可以简洁表达“累积计数”的逻辑,适合熟悉函数式编程的场景。
- 初始值设为空对象或
Map - 每轮返回更新后的计数结构
- 示例(对象版):
const arr = ['x', 'y', 'x'];
const count = arr.reduce((acc, item) => {
acc[item] = (acc[item] || 0) + 1;
return acc;
}, {}); // { x: 2, y: 1 }
注意事项
-
引用类型慎用对象键:数组、对象作键时会被转成
"[object Object]",全部合并。此时必须用Map并确保传入的是同一引用 -
NaN 的特殊性:对象中
NaN键无法通过obj[NaN]访问(因为NaN !== NaN),但Map支持正确处理 -
大小写/空格敏感:如需忽略,遍历前统一
.toLowerCase()或.trim()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










