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

如何用Lodash的countBy/reduce生成按频次排序的元素统计数组

使用Lodash实现按元素频次排序的哈希表数组

方法一:countBy + orderBy + map组合实现

这是最简洁的实现方式,步骤清晰直观:

  1. 用_.countBy统计数组元素的出现频次:
const arr = ['A', 'B', 'C', 'B', 'A', 'B', 'C', 'B', 'B'];
const countObj = _.countBy(arr);
// 输出结果:{ A: 2, B: 5, C: 2 }
  1. 将统计对象转为键值对数组,方便后续排序操作:
const entries = _.entries(countObj);
// 输出结果:[ ['A', 2], ['B', 5], ['C', 2] ]
  1. 按频次降序排序(若频次相同,可额外按元素名称排序,这里只做频次排序):
const sortedEntries = _.orderBy(entries, [1], ['desc']);
// 输出结果:[ ['B', 5], ['A', 2], ['C', 2] ]
  1. 将排序后的键值对转为单个键值对的对象数组:
const result = _.map(sortedEntries, ([key, count]) => ({ [key]: count }));
// 输出结果:[ { B: 5 }, { A: 2 }, { C: 2 } ]

也可以把步骤合并成链式调用,更简洁:

const arr = ['A', 'B', 'C', 'B', 'A', 'B', 'C', 'B', 'B'];
const result = _.chain(arr)
  .countBy()
  .entries()
  .orderBy(1, 'desc')
  .map(([k, v]) => ({ [k]: v }))
  .value();

方法二:用reduce手动统计+排序

如果想手动通过reduce完成频次统计,后续步骤和方法一一致:

  1. 用_.reduce统计元素频次:
const countObj = _.reduce(arr, (acc, curr) => {
  acc[curr] = (acc[curr] || 0) + 1;
  return acc;
}, {});
// 输出结果和countBy一致:{ A: 2, B: 5, C: 2 }
  1. 重复方法一中的排序、转换步骤,即可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:39:21