You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript Map统计数组元素频次出错,求解决方案

解决Map统计数组元素频次出现NaN的问题

我尝试用JavaScript的Map对象统计数组[1,2,3,4,5,5,5,6,6,6]中数字的出现频次,但运行代码后控制台显示Map中的值都是NaN。代码如下:

let arr=[1,2,3,4,5,5,5,6,6,6];
let map=new Map();
arr.forEach((n)=>{
    map.set(n,map.get(n)+1);
});
for(let [k,v] of map){
    console.log(k,v);
}

问题原因

第一次处理数组中每个新元素时,map.get(n)会返回undefined(Map中还未存入该键),而undefined + 1的计算结果是NaN,后续对该元素的累加操作只会持续得到NaN。

解决方法

方法一:给map.get()设置默认值

利用逻辑或运算符,确保首次获取不存在的键时得到默认值0,再执行累加:

let arr=[1,2,3,4,5,5,5,6,6,6];
let map=new Map();
arr.forEach((n)=>{
    map.set(n, (map.get(n) || 0) + 1);
});
for(let [k,v] of map){
    console.log(k,v);
}

方法二:先判断元素是否存在

通过map.has()检查当前元素是否已在Map中,不存在则初始化为1,存在则累加:

let arr=[1,2,3,4,5,5,5,6,6,6];
let map=new Map();
arr.forEach((n)=>{
    if(map.has(n)){
        map.set(n, map.get(n)+1);
    }else{
        map.set(n, 1);
    }
});
for(let [k,v] of map){
    console.log(k,v);
}

运行结果

修改后执行代码,控制台会输出正确的元素频次:

1 1
2 1
3 1
4 1
5 3
6 3

内容的提问来源于stack exchange,提问作者haobin liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:06:27