第1引数「配列」の中で値の最大値を返す。第2引数が指定されていた場合は、配列の各値に第2引数を適用した値の中で最大のものを返す。
■使用例
var arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
// re = 10;
var re = _.max( arr );
var obj = [
{
title : "Final Fantasy4 Original SoundTrack",
year : 1991,
author : "Nobuo Uematu"
},
{
title : "Final Fantasy5 Original SoundTrack",
year : 1992,
author : "Nobuo Uematu"
},
{
title : "Final Fantasy6 Original SoundTrack",
year : 1992,
author : "Nobuo Uematu"
},
{
title : "悪魔城ドラキュラX 月下の夜想曲",
year : 1994,
author : "Michiru Yamane"
}
];
var func = function( obj ){
return obj.year;
}
// re = { title: "悪魔城ドラキュラX 月下の夜想曲", year: 1994, author: "Michiru Yamane" }
var re = _.max( obj, func );
■内部構造
_.max = function(obj, iteratee, context) {
var result = -Infinity, lastComputed = -Infinity,
value, computed;
if (iteratee == null && obj != null) {
// 第2引数「iteratee」が null で第1引数「obj」が null じゃない時。
// 第1引数「obj」が配列か arguments ならそのまま。Object なら key 配列を作成。
obj = isArrayLike(obj) ? obj : _.values(obj);
// 第1引数「obj」の各値で最大のものを調べるforループ。
for (var i = 0, length = obj.length; i < length; i++) {
value = obj[i];
if (value > result) {
result = value;
}
}
} else {
// 第2引数「iteratee」が null じゃない時。
// 第3引数が入力されていない、第2引数が関数ならそのまま。
iteratee = cb(iteratee, context);
_.each(obj, function(value, index, list) {
// 第1引数「obj」の各値を第2引数「iteratee」で適用した値 = computed。
computed = iteratee(value, index, list);
// computed の値が比べられ最大値の値がresultになる。
if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
result = value;
lastComputed = computed;
}
});
}
// 最大値の値 == result が返る。
return result;
};