2014-01-24 33 views
0

我是Underscore的新手。 我正在使用下面的函数来获取包含发生的值的计数和哪些工作正常的对象。如何在下划线中获取由max函数返回的值的密钥

_.countBy(data, function(value) { 
      if(value[1] <10) return '0' ; 
      if(value[1] >99 && value[1] <= 999) return '1'; 
      if(value[1] >1000) return '2'; 

      }); 

_.countBy功能给我输出{1 : 23, 2: 4}

因此,使用_.max功能,我能够得到价值23

但我想它的键(这是1),其最大值返回。

我该怎么做?

感谢

+0

'_.indexOf(值, _.max(值))'?不是最有效的,但它会起作用。 –

+0

多数民众赞成多么实际上我现在要试试看,我看到你的评论:) – Pratik

+0

其返回-1 – Pratik

回答

0

最后因为this回答我能够得到使用下面的代码最大值关键。

var occurrenceCount = _.countBy(data, function(value) { 
      if(value[1] <10) return '0' ; 
      if(value[1] >99 && value[1] <= 999) return '1'; 
      if(value[1] >1000) return '2'; 

      }); 
var maxValue = _.max(occurrenceCount); 
var key= _.invert(occurrenceCount)[maxValue]; 

所以越来越关键的1{1 : 23, 2: 4}

+0

这不会工作,如果有多个键具有相同的最大值,例如如果countBy返回{1:23,2:4,0:23},则反转将返回{4:2,23,0}。使用_filter查看备选答案。 –

0

就这么简单。

var occurrenceCount = {1:15, 2:3, 3: 45, 4: 12}; 
var result = _.max(_.pairs(occurrenceCount), _.last); 

输出

[ '3', 45 ] 

如果你只想要键,你可以简单地做

var result = _.first(_.max(_.pairs(occurrenceCount), _.last)); 

输出

3 
1

虽然这是很老的问题,但你可以链中的解决方案,以及

var occurrenceCount = {1:15, 2:3, 3: 45, 4: 12}; 
var max = _.chain(occurrenceCount).max().value(); 

这会给你最大价值,然后你可以反转找到钥匙

_.chain(occurrenceCount).invert().value()[max]; 
+0

@Pratik如果能解决您的问题,请您接受答案。谢谢。 – Rahul

相关问题