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

如何获取数组中出现指定次数的数字?

实现方法

这很容易实现!核心思路就是先统计数组中每个数字的出现次数,再筛选出次数恰好等于指定值n的数字。这里给你两种可行的实现方式:

方法一:使用 Map(推荐,无需类型转换)

function scr(array, n) {
  // 用 Map 统计每个数字的出现次数
  const countMap = new Map();
  for (const num of array) {
    countMap.set(num, (countMap.get(num) || 0) + 1);
  }

  // 筛选出出现次数等于 n 的数字,并转化为数组返回
  return Array.from(countMap)
    .filter(([num, count]) => count === n)
    .map(([num]) => num);
}

// 测试你的示例
console.log(scr([187,187,187,187,187,62,62,43,43,43,43,43,5,5,5], 5)); // 输出: [187, 43]

代码解释

  • Map 可以直接以数字作为键,避免了类型转换的麻烦
  • 遍历数组时,每次更新对应数字的计数:如果数字已在Map中,计数+1;否则初始化为1
  • 最后通过Array.from把Map转为二维数组,用filter筛选计数等于n的项,再用map提取数字部分

方法二:使用普通对象

function scr(array, n) {
  const countObj = {};
  
  // 统计每个数字的出现次数
  array.forEach(num => {
    countObj[num] = (countObj[num] || 0) + 1;
  });

  // 筛选结果并转换回数字类型(因为对象键默认是字符串)
  return Object.entries(countObj)
    .filter(([numStr, count]) => count === n)
    .map(([numStr]) => Number(numStr));
}

代码解释

  • 用普通对象存储计数,键会自动转为字符串,所以最后需要用Number()把键转回到数字类型
  • 逻辑和Map版本一致,只是存储结构不同

两种方法都能满足你的需求,Map版本在处理数字类型时更直观,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:03:59