Underscore.js:查找数组中最常出现的值?

k00*_*00k 16 javascript underscore.js

考虑以下简单数组:

var foods = ['hotdog', 'hamburger', 'soup', 'sandwich', 'hotdog', 'watermelon', 'hotdog'];
Run Code Online (Sandbox Code Playgroud)

underscore,是否有一个函数或函数组合,我可以用来选择最常出现的值(在这种情况下是它hotdog)?

sol*_*oth 43

var foods = ['hotdog', 'hamburger', 'soup', 'sandwich', 'hotdog', 'watermelon', 'hotdog'];
var result = _.chain(foods).countBy().pairs().max(_.last).head().value();
console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
Run Code Online (Sandbox Code Playgroud)

countBy:将列表排序到组中,并返回每个组中对象数的计数.

:将对象转换为[key, value]对列表.

max:返回列表中的最大值.如果提供了迭代器函数,则将在每个值上使用它来生成值的排序标准.

last:返回数组的最后一个元素

head:返回数组的第一个元素

chain:返回一个包装对象.对此对象调用方法将继续返回包装对象,直到使用value.

value:提取包装对象的值.

  • 我建议`max(_.last)`而不是lambda. (5认同)
  • 如果您正在使用lodash,请将.pairs()与.toPairs()和.max替换为.maxBy (5认同)
  • 这非常聪明:-D (3认同)