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

如何简洁获取JSON对象列表中最常见属性值的计数?

问题:获取JSON对象列表中某属性最常见值的计数的简洁实现方式

将给定数据示例中,最常见的"a"属性值(值为"x")的计数为2。现需获取JSON对象列表中某属性的最常见属性值的计数,请问最简洁的实现方式是什么?我原本设想可以生成不同值的计数数组(如示例中的[2, 1]),再通过Math.max(...array)获取最大值,但未能找到简洁的实现方法。

简洁实现方案

嘿,其实你思路方向完全没问题,用reduce统计计数再取最大值就是最简洁的路子,直接上代码和解释:

假设我们的JSON数组是这样的:

const data = [{a: 'x'}, {a: 'x'}, {a: 'y'}];

单行精简写法

const maxCount = Math.max(...Object.values(data.reduce((cnt, item) => (cnt[item.a] = (cnt[item.a] || 0) + 1, cnt), {})));

更易读的拆分写法

如果觉得单行太紧凑,拆开来更清晰:

// 第一步:用reduce统计每个属性值的出现次数
const countMap = data.reduce((counts, item) => {
  // 如果当前值还没统计过,默认给0,然后加1
  counts[item.a] = (counts[item.a] || 0) + 1;
  return counts;
}, {}); // 初始值是一个空对象用来存计数

// 第二步:提取计数数组并取最大值
const maxCount = Math.max(...Object.values(countMap));

这段代码会先得到countMap为{x: 2, y: 1},再提取值数组[2, 1],最后用Math.max拿到最大值2,完美匹配你的需求。

通用封装函数

如果需要复用在不同属性上,可以封装成一个函数:

function getMostFrequentValueCount(arr, propName) {
  const countMap = arr.reduce((acc, item) => {
    acc[item[propName]] = (acc[item[propName]] || 0) + 1;
    return acc;
  }, {});
  // 处理空数组的情况,避免Math.max报错
  return Object.values(countMap).length ? Math.max(...Object.values(countMap)) : 0;
}

// 调用示例
const data = [{a: 'x'}, {a: 'x'}, {a: 'y'}, {b: 'z'}];
console.log(getMostFrequentValueCount(data, 'a')); // 输出2
console.log(getMostFrequentValueCount(data, 'b')); // 输出1

这样不管你要统计哪个属性的最常见值计数,直接传数组和属性名就行啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:52:05