使用lodash找出数组中出现最频繁的元素

4
我需要帮助的是一个练习,它要求我返回数组中出现次数最多的项。我知道有其他关于这个问题的帖子,但我找不到只使用lodash的适配方法。
例如: var array = [3,'a','a','a',2,3,'a',3,'a',2,4,9,3] 应该返回:a(5次)
我尝试过使用._groupBy._countBy_.sortBy等方法,但总是卡在某个地方。谢谢。

“我尝试了像 _.groupBy_.countBy_.sortBy 这样的方法” —— 我们能看到这些尝试吗?请编辑您的问题并提供一个 [mcve]。 - Sebastian Simon
9
这不是一个重复问题!这个问题询问的是 lodash,而之前的重复问题是关于 underscore 的!不是同一个问题! - Simon_Weaver
1
很好的问题。而你的问题被攻击似乎是另一个通过社交媒体“门卫”投射自我重要性错觉的小人的典型例子。 - user3751385
1个回答

18
使用 _.countBy() 获取元素:计数的对象。使用 _.entries() 将其转换为元组数组。使用 _.maxBy(_.last) 找到最大值,因为计数值是元组中的第二个项目。使用 _.head() 从元组中提取元素。

var array = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3];

var result = _.head(_(array)
  .countBy()
  .entries()
  .maxBy(_.last));

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

如果您正在从lodash导入特定的方法,并且不想使用链式调用,请改用_.flow()

var { countBy, entries, flow, head, last, maxBy, partialRight } = _;

var array = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3];

var result = flow(
  countBy,
  entries,
  partialRight(maxBy, last),
  head
)(array);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接