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)
使用下划线没问题。
是否有任何特殊要求,例如您不能将多个功能组合起来做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)
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |