使用lodash分组过滤器数据,并结合

问题描述:

我有输出像这样:使用lodash分组过滤器数据,并结合

{ diagnosis: 'Flu' } 
{ diagnosis: 'Down Syndrome' } 
{ diagnosis: 'Down Syndrome' } 
{ diagnosis: 'Epilepsy' } 
{ diagnosis: 'Epilepsy' } 
{ diagnosis: 'Muscle Spasm' } 
{ diagnosis: 'Muscle Spasm' } 
{ diagnosis: 'Epilepsy' } 
{ diagnosis: 'Muscle Spasm' } 
{ diagnosis: 'Nervousness' } 
{ diagnosis: 'Weezing' } 
{ diagnosis: 'Unknown' } 

你会发现,Epilepsy显示了4倍,Muscle Tension and Spasm显示了3倍,Crazy Guy Syndrome显示出来2,其余露面只有一次。我想创建一个包含3个最常见疾病的数组,例如:['Epilepsy', 'Muscle Tension and Spasm', 'Crazy Guy Syndrome']并忽略其余部分。我正在尝试用lodash做到这一点。有什么建议么?目前我使用_.groupBy()没有运气。

这里有一个例子是链在一起的几个lodash功能:

_(data) 
    .map('diagnosis') 
    .countBy() 
    .toPairs() 
    .sortBy(_.last) 
    .reverse() 
    .take(3) 
    .map(_.head) 
    .value(); 

这里是发生了什么事情:

  1. map('diagnosis')创建新的数组,只用diagnosis属性值
  2. countBy()创建对象,其中的键是数组的唯一值,并且值是该值的出现次数
  3. toPairs()将对象转换为键/值阵列
  4. sortBy(_.last)使用sortBy()last()基于它多少次发生在原始data
  5. reverse()用于以降序排序的数组的数组进行排序的阵列
  6. take(3)使用take()到阵列结果限制顶端三个项目
  7. map(_.head)使用map()head()去除排序数据
+0

这是光滑亚当。非常感谢! – JeffC

你可以试试这个解决方案,以及:

DEMO

_(data) 
    .countBy('diagnosis') // counts by diagnosis key 
    .invert() // inverts count value and diagnosis key for sorting 
    .map() // get all diagnosis values 
    .reverse() // reverse 
    .take(3) // take the top 3 
    .value();