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

JavaScript统计数字数组频率时如何让对象键为number类型

原理说明

JS 中普通对象的键仅支持字符串和 Symbol 类型,你传入数字作为键时会被自动转为字符串,这是你遇到类型问题的根本原因。

可选优雅方案

方案1:使用 Map 存储频率统计结果(最推荐)

Map 支持任意类型作为键,可直接保留数字类型的键,不需要额外转换。
你的代码可以改成如下写法:

let freq = new Map()
let nums = [1,2,3]
nums.forEach(n => {
    freq.set(n, (freq.get(n) || 0) + 1)
})
let uniq = Array.from(freq.keys())
console.log(typeof uniq[0]) // 输出 number

后续校验连续性时可以直接做数值计算,不需要每次转类型:

if (k2 === k1 + 1) {
    // 直接判断即可
}

方案2:普通对象统一转换键类型

如果你坚持要用普通对象存储,可以在提取键时一次性转成数字数组,不需要每次判断时单独转parseInt:

let freq = {}
let nums = [1,2,3]
nums.forEach(n => {
    freq[n] = (freq[n] || 0) + 1
})
// 提取键时一次性转成数字数组
let uniq = Object.keys(freq).map(Number)
console.log(typeof uniq[0]) // 输出 number
方案选型建议
  • 如果不需要把统计结果直接序列化为JSON,优先选Map,类型安全性更高,遍历、增删操作的性能也更优
  • 如果后续需要直接把统计结果转JSON传输,可选方案2,只需要做一次类型转换即可,不需要每次判断都调用parseInt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:54:09