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

JavaScript对象数组值区间键计数统计及结果对象生成

解决JS对象数组区间统计问题

首先得指出你现有代码里的几个关键问题:

  • 你在filter里用dat[key]直接和数字比较,但dat[key]是数组里的完整对象(比如{"ruid":1,"id_frequency":5}),不是id_frequency属性值,这会导致比较逻辑完全错误,应该取dat[key].id_frequency来判断。
  • 代码只处理了0-9这一个区间,没有覆盖你需要的所有区间(10-19到90-100)。
  • 没有生成要求的包含区间标识c和计数d的对象数组,也没用到Object Map存储统计结果。

接下来咱们一步步实现符合需求的逻辑:

完整实现代码

// 测试数据集
const dat = [ 
  { "ruid": 1, "id_frequency": 5 }, 
  { "ruid": 2, "id_frequency": 88 }, 
  { "ruid": 3, "id_frequency": 69 }, 
  { "ruid": 4, "id_frequency": 28 }, 
  { "ruid": 5, "id_frequency": 75 }, 
  { "ruid": 6, "id_frequency": 78 }, 
  { "ruid": 7, "id_frequency": 18 }, 
  { "ruid": 8, "id_frequency": 90 }, 
  { "ruid": 9, "id_frequency": 22 } 
];

// 定义所有需要统计的区间,包含最小值、最大值和区间标识
const intervals = [
  { min: 0, max: 9, label: '0-9' },
  { min: 10, max: 19, label: '10-19' },
  { min: 20, max: 29, label: '20-29' },
  { min: 30, max: 39, label: '30-39' },
  { min: 40, max: 49, label: '40-49' },
  { min: 50, max: 59, label: '50-59' },
  { min: 60, max: 69, label: '60-69' },
  { min: 70, max: 79, label: '70-79' },
  { min: 80, max: 89, label: '80-89' },
  { min: 90, max: 100, label: '90-100' }
];

// 初始化Object Map,用来存储每个区间的计数
const freqMap = new Map();
intervals.forEach(interval => freqMap.set(interval.label, 0));

// 遍历数据集,统计每个区间的ruid数量
dat.forEach(item => {
  const currentFreq = item.id_frequency;
  // 找到当前id_frequency所属的区间
  const matchedInterval = intervals.find(inter => currentFreq >= inter.min && currentFreq <= inter.max);
  if (matchedInterval) {
    // 更新Map中的计数
    freqMap.set(matchedInterval.label, freqMap.get(matchedInterval.label) + 1);
  }
});

// 生成包含区间标识c和计数d的结果数组
const resultArray = intervals.map(interval => ({
  c: interval.label,
  d: freqMap.get(interval.label)
}));

// 输出结果
console.log('统计Map:', freqMap);
console.log('结果数组:', resultArray);

代码说明

  1. 区间定义:咱们先把所有需要统计的区间提前定义好,每个区间包含最小值、最大值和显示用的标识,这样后续逻辑更清晰。
  2. Map初始化:先给每个区间的计数设为0,避免出现未定义的情况。
  3. 遍历统计:逐个读取数据集中的id_frequency,找到对应的区间后更新Map里的计数。
  4. 生成结果数组:把Map里的统计结果转换成你需要的对象数组格式,每个元素包含c(区间标识)和d(计数)。

运行结果

对于你的测试数据集,最终的resultArray会是:

[
  { c: '0-9', d: 1 },
  { c: '10-19', d: 1 },
  { c: '20-29', d: 2 },
  { c: '30-39', d: 0 },
  { c: '40-49', d: 0 },
  { c: '50-59', d: 0 },
  { c: '60-69', d: 1 },
  { c: '70-79', d: 2 },
  { c: '80-89', d: 1 },
  { c: '90-100', d: 1 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:28:16