JavaScript 中用 Map 实现去重并统计频次的核心是将元素作 key、次数作 value,遍历时累加;支持任意类型 key 且严格相等判断,可转对象、过滤或排序。

用 JavaScript 的 Map 实现去重并统计频次,核心是把元素作为键(key),把出现次数作为值(value),遍历时对每个键对应的值做累加。
用 Map 遍历累加计数
这是最直接、推荐的方式:创建空 Map,遍历数组,对每个元素检查是否存在;存在则值 +1,不存在则设为 1。
示例代码:
const arr = ['a', 'b', 'a', 'c', 'b', 'a'];
const countMap = new Map();
<p>for (const item of arr) {
countMap.set(item, (countMap.get(item) || 0) + 1);
}</p><p>// 结果:Map(3) { 'a' => 3, 'b' => 2, 'c' => 1 }
console.log(Object.fromEntries(countMap)); // { a: 3, b: 2, c: 1 }</p>用 reduce + Map 构建(函数式写法)
适合喜欢链式或函数式风格的场景。用 reduce 把数组聚合成一个 Map。
说明:reduce 的初始值是空 Map,每次返回更新后的 Map。
const arr = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'];
const countMap = arr.reduce((map, item) => {
map.set(item, (map.get(item) || 0) + 1);
return map;
}, new Map());
<p>// 得到 Map { 'apple' => 3, 'banana' => 2, 'orange' => 1 }</p>注意 key 的类型与相等性
Map 的键支持任意类型(包括对象、函数、NaN),且使用严格相等(===)判断是否重复,这点比用普通对象更可靠。
- 字符串、数字、布尔值:按值比较,没问题
- 对象或数组:不同引用视为不同 key,即使内容相同
- NaN 会被正确识别为同一个 key(而普通对象中
obj[NaN] = 1实际会转成字符串"NaN")
获取结果的几种常用方式
统计完后,可根据需要转换为其他格式:
-
转为普通对象:用
Object.fromEntries(countMap) -
只取出现次数 ≥2 的元素(即真正重复的):用
Array.from(countMap).filter(([, count]) => count > 1) -
按频次降序排列:用
Array.from(countMap).sort((a, b) => b[1] - a[1])
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











