prototype.js の max,min がいまいち

体力が一番残ってるやつの名前が知りたいとき

[{name: "foo", hp:5},
 {name: "bar", hp:3},
 {name: "boo", hp:2}].max(function(x) {return x.hp});

実行結果 5

HP5じゃなくてインデックス(この場合 0)か要素をよこせ。
ああ、こんなとき関数型言語ならfoldを使うのに。
(mzpのコメントを受けて修正)こういうとき、関数型言語ではfoldを使う。prototype.jsではinjectとして入っている。

[{name: "foo", hp:5},
 {name: "bar", hp:3},
 {name: "boo", hp:2}].inject({hp:-1},function(x,y) {
 return (x.hp > y.hp) ? x : y}).name;

でOK.
(foldはjavascript 1.8 でreduceという名前で入る)

配列の総和 1 + 2 + ... + 10
$A($R(1,10)).inject(0,function(x,y) {return x+y});
階乗の計算 10!
$A($R(1,10)).inject(1,function(x,y) {return x*y});
配列のreverseだってできます
$A($R(1,10)).inject([],function(x,y){x.unshift(y); return x});
配列のmapだってできます
function mymap(f,arr) {
  return arr.inject([],function(x,y){x.push(f(y)); return x});
}
mymap(function(x) {return x * 2},$A($R(0,5)));