ikemonn's blog

技術ネタをちょこちょこと

【Underscore.js】_.mapを読んだ

jashkenas/underscore_.mapを読んだ。

概要

第一引数で与えられたものの値に対して、第二引数の関数を実行してその結果の配列を返す。

var list = [2, 3, 4];
var x = _.map(list, function(n){
    return n *= 3;
});
console.log(x); // [6, 9, 12]
var list = {a: 2, b: 3, c: 4};
var x = _.map(list, function(n){
    return n *= 3;
});
console.log(x); // [6, 9, 12]

 ソースコード

// Return the results of applying the iteratee to each element.
  _.map = _.collect = function(obj, iteratee, context) {
    iteratee = cb(iteratee, context);
    var keys = !isArrayLike(obj) && _.keys(obj),
        length = (keys || obj).length,
        results = Array(length);
    for (var index = 0; index < length; index++) {
      var currentKey = keys ? keys[index] : index;
      results[index] = iteratee(obj[currentKey], currentKey, obj);
    }
    return results;
  };

関数の実行結果をresultsに入れているので、第二引数で指定する関数では戻り値をreturnしないとだめ。

 参考

jashkenas/underscore