我想为此使用下划线,但由于一些愚蠢的原因,它让我无法理解:

我有一个数字列表:
39, 39, 10, 1, 3, 4, 5...等

我想返回 3 个最频繁的和 3 个不太频繁的。

我试过使用 _.countBy 但不知何故返回一个对象,这使得很难(?)排序,除非我错过了明显的。

最佳答案

首先这将它们分组而不带参数(只创建新数组,每个数组具有相同的值),然后按结果数组长度对它们进行排序。然后使用前三个和最后三个元素创建两个新的 min 和 max 数组。 .map 用于仅返回第一个元素,而不是由 .groupBy 创建的数组。

编辑 :这是 Benjamin Gruenbaum 对我的原始答案的巧妙编辑。

var arr = [1,1,1,1,1,1,2,3,4,5,6,7,7,8,9,10,9,8,9,8];
var group = _.sortBy(_.groupBy(arr), "length");
var min = _.pluck(group.slice(0, 3),0);
var max = _.pluck(group.slice(-3),0);
console.log(min);
console.log(max);

jsFiddle

关于javascript - 如何优雅地从列表中返回 3 个最频繁和 3 个不太频繁的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17925487/

10-11 13:14