从一组值中获取多个最大值

Pol*_*Pol 3 javascript jquery underscore.js

例如,underscore/lowdash您可以使用_.max(list, [iterator], [context])函数来接收一个最大值。但是我想让它返回多个最大值,如果它们都相等。

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};
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

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 ];
Run Code Online (Sandbox Code Playgroud)

使用下划线没问题。

Tan*_*yen 5

是否有任何特殊要求,例如您不能将多个功能组合起来做multiplemax。如果不是,我有两个解决方案

最简单的解决方案是使用 _.max 找到age数组的最大值,然后使用 _.filter 过滤所有等于 max 的值age

另一种解决方案是使用 _.groupBy 对数组进行分组age,然后使用 max 获取组age

像这样的东西

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

更多“下划线”

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

或者使用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]});
}
Run Code Online (Sandbox Code Playgroud)