function pick(object, callback, thisArg) {
      var result = {};
      if (typeof callback != 'function') {
        var index = -1,
            props = baseFlatten(arguments, true, false, 1),
            length = isObject(object) ? props.length : 0;

        while (++index < length) {
          var key = props[index];
          if (key in object) {
            result[key] = object[key];
          }
        }
      } else {
        callback = lodash.createCallback(callback, thisArg, 3);
        forIn(object, function(value, key, object) {
          if (callback(value, key, object)) {
            result[key] = value;
          }
        });
      }
      return result;
    }
Creates a shallow clone of `object` composed of the specified properties.
Property names may be specified as individual arguments or as arrays of
property names. If a callback is provided it will be executed for each
property of `object` picking the properties the callback returns truey
for. The callback is bound to `thisArg` and invoked with three arguments;
(value, key, object).

@static
@memberOf _
@category Objects
@param {Object} object The source object.
@param {Function|...string|string[]} [callback] The function called per
 iteration or property names to pick, specified as individual property
 names or arrays of property names.
@param {*} [thisArg] The `this` binding of `callback`.
@returns {Object} Returns an object composed of the picked properties.
@example

_.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
// => { 'name': 'fred' }

_.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
  return key.charAt(0) != '_';
});
// => { 'name': 'fred' }