JavaScript中用Map实现频次统计,以元素为key、次数为value,支持任意类型键且无原型干扰;遍历时用get()??0获取当前计数并set()更新;可遍历entries()找最高频元素;Set仅适合去重,无法直接统计频次。

用 JavaScript 的 Map 实现频次统计,核心是把“元素”作为键(key),把“出现次数”作为值(value),遍历时动态更新计数。
初始化一个空 Map 存储频次
创建 Map 实例,比用普通对象更可靠:支持任意类型键(如对象、函数、NaN),且不会受原型链干扰。
示例:
const freq = new Map(); // 频次 Map,key 是待统计项,value 是次数
遍历数据并累加计数
对每个元素,先查是否存在;存在则 +1,不存在则设为 1。可用 get() 和 set() 组合实现,更简洁写法是用 has() 判断:
立即学习“Java免费学习笔记(深入)”;
- 用
map.get(key) || 0获取当前计数(undefined 时转为 0) - 用
map.set(key, count + 1)更新
常见写法(推荐):
const arr = ['a', 'b', 'a', 'c', 'b', 'a'];
<p>const freq = new Map();
for (const item of arr) {
const count = freq.get(item) ?? 0; // ES2020 空值合并,比 || 更安全
freq.set(item, count + 1);
}
// 结果:Map(3) { 'a' => 3, 'b' => 2, 'c' => 1 }快速获取最高频/最低频元素
统计完成后,可遍历 Map 找极值。注意 Map.prototype.entries() 返回迭代器,适合配合 for...of 或展开运算符使用:
- 找最高频:用
Math.max(...freq.values())得最大值,再遍历匹配 key - 或直接一次遍历:
let maxKey, maxValue = -Infinity; for (const [k, v] of freq) { if (v > maxValue) { maxKey = k; maxValue = v; } }
小技巧:用扩展运算符转数组后排序也方便:
[...freq.entries()].sort((a, b) => b[1] - a[1])[0]; // 最高频项 [key, count]
对比 Set:Set 不适合直接做频次统计
Set 只存唯一值,没有“次数”概念。它适合去重或判断存在性,比如配合 Map 先筛出所有唯一元素,但不能替代 Map 记录数量。
若硬要用 Set 辅助频次统计,只能作为“已见元素集合”,仍需额外结构(如对象或 Map)存次数 —— 这反而增加复杂度,不推荐。


















