min() | Underscore JS 日本語リファレンス

第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;
  };

このページのトップへ戻る
Menu