2014-01-24 2 views
0

Я новичок в Underscore. Я использую функцию ниже, чтобы получить объект, содержащий количество значений, и он работает нормально.Как получить ключ от значения, возвращаемого функцией max в Underscore

_.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

thats, что на самом деле я собираюсь попробовать сейчас, и я увидел ваш комментарий :) – 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

Смежные вопросы