You need to enable JavaScript to run this app. 如何用JavaScript统计JSON对象数组指定字段的最高频次值
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript统计JSON对象数组指定字段的最高频次值

最高频字段统计实现方案

整个计算过程可以做到O(n)时间复杂度,单次遍历完成所有统计,没有冗余循环,常规业务数据量下毫秒级就能出结果,完全满足高效简洁的要求。

实现思路

核心逻辑是边遍历边计数、边更新最大值,不需要先把所有值的数量存完再二次遍历找最大值:

  • 针对要统计的字段,维护一个计数表,记录每个值的出现次数
  • 每遍历到一条日志,就给对应值的计数加1
  • 如果当前值的计数超过已经记录的最大计数,就直接更新最终结果,不用等全部遍历完再回头比对
  • 自动跳过字段缺失的异常数据;如果出现多个值计数相同的情况,默认返回最先出现的值,符合常规业务的预期

可直接复用的代码实现

/**
 * 统计数组中指定字段的最高频值
 * @param {Array} arr 待统计的对象数组
 * @param {String} field 需要统计的字段名
 * @returns {*} 出现频次最高的字段值
 */
function getMostFrequent(arr, field) {
  const countMap = {};
  let maxValue = null;
  let maxCount = 0;

  for (const item of arr) {
    const currentValue = item[field];
    // 跳过字段不存在的异常数据
    if (currentValue === undefined) continue;

    // 更新当前值的出现次数
    countMap[currentValue] = (countMap[currentValue] || 0) + 1;

    // 实时更新最高频结果,省去后续遍历计数表的开销
    if (countMap[currentValue] > maxCount) {
      maxCount = countMap[currentValue];
      maxValue = currentValue;
    }
  }

  return maxValue;
}

// 业务调用示例
const userBehaviorLogs = [/* 替换为你提供的那组日志数据 */];
const maxCategory = getMostFrequent(userBehaviorLogs, 'category');
const maxProduct = getMostFrequent(userBehaviorLogs, 'product');

用你给出的示例数据运行后,输出结果和预期完全一致:

  • maxCategory 值为 "Motor Insurance"
  • maxProduct 值为 "Car Insurance"

方案的高效性来源

  • 没有冗余循环:相比“先全量统计所有值的计数、再二次遍历计数表找最大值”的写法,这个方案在同一次遍历里就完成了最大值判定,比常规写法少了一轮全量扫描
  • 复用性强:不需要为category、product两个字段各写一套统计逻辑,同一个函数可以适配任意字段的最高频统计需求
  • 内存占用低:计数表的大小和数组中去重后的字段值数量一致,不会额外占用不必要的内存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 09:15:04