ikemonn's blog

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

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

jashkenas/underscore_.pickを読んだ。

概要

_.pick(object, *keys)

第一引数から第2引数以降で指定したkey値とその値で構成されたObjectを返す。

var x = _.pick({age: 20, sex: "male", country: "JP", name: "HOGA"}, 'age', 'country');
console.log(x); // {age: 20, country: "JP"}

var y = _.pick(list, function(val, key, obj){
    return _.isNumber(val);
});

console.log(y); // {age: 20}

ソースコード

_.pick = function(object, oiteratee, context) {
    var result = {}, obj = object, iteratee, keys;
    if (obj == null) return result;
    if (_.isFunction(oiteratee)) {
      keys = _.allKeys(obj);
      iteratee = optimizeCb(oiteratee, context);
    } else {
      keys = flatten(arguments, false, false, 1);
      iteratee = function(value, key, obj) { return key in obj; };
      obj = Object(obj);
    }
    for (var i = 0, length = keys.length; i < length; i++) {
      var key = keys[i];
      var value = obj[key];
      if (iteratee(value, key, obj)) result[key] = value;
    }
    return result;
  };

第二引数が関数の場合、各プロパティに対して渡した関数実行される。 関数でない場合は、指定したkeyのプロパティを第一引数のobjectから取得している。

参考

jashkenas/underscore