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

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

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