How to find the minimum value key in an underline hash

I would like to find the underscore of the minimum value. For instance:

var my_hash = {'0-0' : {value: 23, info: 'some info'},
              '0-23' : {value: 8, info: 'some other info'},
              '0-54' : {value: 54, info: 'some other info'},
              '0-44' : {value: 34, info: 'some other info'}
              }
find_min_key(my_hash); => '0-23'

How can I do this using underscorejs?

I tried:

_.min(my_hash, function(r){
  return r.value;
});
# I have an object with the row, but not it key
# => Object {value: 8, info: "some other info"}

I also try to sort it (and then get the first element):

_.sortBy(my_hash, function(r){ 
  return r.value; 
})

But it returns an array with numeric indices, so my hash keys are lost.

+3
source share
3 answers

With Underline or Lass <4:

_.min(_.keys(my_hash), function(k) { return my_hash[k].value; });//=> 0-23

With Lodash> = 4:

_.minBy(_.keys(my_hash), function(k) { return my_hash[k].value; });//=> 0-23

Without library:

Object.entries(my_hash).sort((a, b) => a[1].value - b[1].value)[0][0]

or

Object.keys(my_hash).sort((a, b) => my_hash[a].value - my_hash[b].value)[0]

+6
source

You can do this with reduce:

var result = _.reduce(my_hash, function(memo, val, key) {
  if (val.value < memo.value || _.isNull(memo.value)) {
    return {key: key, value: val.value};
  } else {
    return memo;
  }
}, {key: "none", value: null});
console.log(result.key);

Outputs:

0-23
+3
source
_.reduce(my_hash, function(m, v, k, l) {
  if (v.value <= l[m].value) {
    m = k;
  }
  return m;
}, '0-0');
+3
source

All Articles