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

第1引数「入れ子の配列」に第2引数で指定したメソッドを各配列に実行する。

■使用例

var arr001 = [5, 1, 7];
var arr002 = [3, 2, 1]

// re = [ [1,5,7], [1,2,3] ]
var re = _.invoke( [arr001, arr002], "sort");

var arr001 = [5, 1, 7];
var arr002 = [3, 2, 1]

// re2 = [ 5, 3 ]
var re2 = _.invoke( [arr001, arr002], "shift");

var arr001 = [5, 1, 7];
var arr002 = [3, 2, 1]

// re3 = [ 7, 1 ]
var re3 = _.invoke( [arr001, arr002], "pop");

■内部構造

  _.invoke = function(obj, method) {

// arguments.slice( 2 ); ほとんど args = [ ]; になる。 
    var args = slice.call(arguments, 2);

// method が関数かどうか確認される。_内で定義されている文字列でないと isFunc = true にならない。
    var isFunc = _.isFunction(method);

    return _.map(obj, function(value) {    	
// isFunc = true なら第1引数「obj」の各値を this、引数を args とした method 処理が行われる。
      var func = isFunc ? method : value[method];
      return func == null ? func : func.apply(value, args);
    });
  };

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