| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | var arrayFilter = require('./_arrayFilter'),    baseFilter = require('./_baseFilter'),    baseIteratee = require('./_baseIteratee'),    isArray = require('./isArray');/** * Iterates over elements of `collection`, returning an array of all elements * `predicate` returns truthy for. The predicate is invoked with three * arguments: (value, index|key, collection). * * **Note:** Unlike `_.remove`, this method returns a new array. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the new filtered array. * @see _.reject * @example * * var users = [ *   { 'user': 'barney', 'age': 36, 'active': true }, *   { 'user': 'fred',   'age': 40, 'active': false } * ]; * * _.filter(users, function(o) { return !o.active; }); * // => objects for ['fred'] * * // The `_.matches` iteratee shorthand. * _.filter(users, { 'age': 36, 'active': true }); * // => objects for ['barney'] * * // The `_.matchesProperty` iteratee shorthand. * _.filter(users, ['active', false]); * // => objects for ['fred'] * * // The `_.property` iteratee shorthand. * _.filter(users, 'active'); * // => objects for ['barney'] * * // Combining several predicates using `_.overEvery` or `_.overSome`. * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); * // => objects for ['fred', 'barney'] */function filter(collection, predicate) {  var func = isArray(collection) ? arrayFilter : baseFilter;  return func(collection, baseIteratee(predicate, 3));}module.exports = filter;
 |