Is there any javascript library that contains functions like min_by,max_by in Ruby, which allow you pass a lambda as a criteria to compare. I found not such things in JQuery and underscore.js .
Advertisement
Answer
To use this in the same way as Ruby, ie call it on the array:
Array.prototype.minBy = function(lambda) {
var lambdaFn;
if (typeof(lambda) === "function") {
lambdaFn = lambda;
} else {
lambdaFn = function(x){
return x[lambda];
}
}
var mapped = this.map(lambdaFn);
var minValue = Math.min.apply(Math, mapped);
return this[mapped.indexOf(minValue)];
}
So the ruby example becomes:
['albatross', 'dog', 'horse'].minBy(function(x){return x.length }) // = 'dog'
or:
['albatross', 'dog', 'horse'].minBy("length") // = 'dog'