Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
42 lines (40 sloc)
1.47 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var baseFlatten = require('../internal/baseFlatten'), | |
| bindCallback = require('../internal/bindCallback'), | |
| pickByArray = require('../internal/pickByArray'), | |
| pickByCallback = require('../internal/pickByCallback'), | |
| restParam = require('../function/restParam'); | |
| /** | |
| * Creates an object composed of the picked `object` properties. Property | |
| * names may be specified as individual arguments or as arrays of property | |
| * names. If `predicate` is provided it is invoked for each property of `object` | |
| * picking the properties `predicate` returns truthy for. The predicate is | |
| * bound to `thisArg` and invoked with three arguments: (value, key, object). | |
| * | |
| * @static | |
| * @memberOf _ | |
| * @category Object | |
| * @param {Object} object The source object. | |
| * @param {Function|...(string|string[])} [predicate] The function invoked per | |
| * iteration or property names to pick, specified as individual property | |
| * names or arrays of property names. | |
| * @param {*} [thisArg] The `this` binding of `predicate`. | |
| * @returns {Object} Returns the new object. | |
| * @example | |
| * | |
| * var object = { 'user': 'fred', 'age': 40 }; | |
| * | |
| * _.pick(object, 'user'); | |
| * // => { 'user': 'fred' } | |
| * | |
| * _.pick(object, _.isString); | |
| * // => { 'user': 'fred' } | |
| */ | |
| var pick = restParam(function(object, props) { | |
| if (object == null) { | |
| return {}; | |
| } | |
| return typeof props[0] == 'function' | |
| ? pickByCallback(object, bindCallback(props[0], props[1], 3)) | |
| : pickByArray(object, baseFlatten(props)); | |
| }); | |
| module.exports = pick; |