第1引数「配列」の中で値の最小値を返す。第2引数が指定されていた場合は、配列の各値に第2引数を適用した値の中で最小のものを返す。
■使用例
var arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
// re = 1;
var re = _.min( 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: "Final Fantasy4 Original SoundTrack", year: 1991, author: "Nobuo Uematu" }
var re = _.min( obj, func );
■内部構造
_.min = 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;
};