Get multiple maximum values from an array of values

javascript, jquery, underscore.js

Solution

Is there any special requirements like you cant not combine multiple functions to do multiplemax. If no, I have 2 solutions in my mind

The simplest solution would be to use _.max to find the max `age` of the array, then use _.filter to filter all values that are equal to max `age`

Another solution is to use _.groupBy to group the array by `age` and then get the group with max `age`

Something like this

function multiplemax(arr, compare) {
  var groups = _.groupBy(arr, compare);
  var keys = _.keys(groups);
  var max = _.max(keys);
  return groups[max];
}

more "underscore"

_.mixin({
  multiplemax: function(arr, fn) {
    var groups = _.groupBy(arr, fn);
    var keys = _.keys(groups);
    var max = _.max(keys);
    return groups[max];
  }
})

Or using `max` + `filter`

function multiplemax(arr, compare) {
  var max = _.max(arr, function(v){return v[compare]});
  return _.filter(arr, function(v){return v[compare]==max[compare]});
}

Problem

For example in `underscore/lowdash` you can use `_.max(list, [iterator], [context])` function to receive one maximum value. But I want to have it returned multiple maximum values if they are all equal. ``` var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 50}]; _.max(stooges, function(stooge){ return stooge.age; }); => {name: 'curly', age: 50}; ``` I want to have somthing like this: ``` var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 50}]; _.multiplemax(stooges, function(stooge){ return stooge.age; }); => [{name: 'curly', age: 50}, {name: 'larry', age: 50 ]; ``` Using underscore is ok.

Original source