code: function find(collection, predicate, thisArg) {
        var length = collection ? collection.length : 0;
  
        if (typeof length == 'number' && length > -1 && length <= maxSafeInteger) {
          var index = findIndex(collection, predicate, thisArg);
          return index > -1 ? collection[index] : undefined;
        }
        predicate = lodash.createCallback(predicate, thisArg, 3);
        return baseFind(collection, predicate, baseEach);
      }
docs: Iterates over elements of a collection, returning the first element that
  the predicate returns truthy for. The predicate is bound to `thisArg` and
  invoked with three arguments; (value, index|key, collection).
  
  If a property name is provided for `predicate` the created "_.pluck" style
  callback will return the property value of the given element.
  
  If an object is provided for `predicate` the created "_.where" style callback
  will return `true` for elements that have the properties of the given object,
  else `false`.
  
  @static
  @memberOf _
  @alias detect
  @category Collections
  @param {Array|Object|string} collection The collection to search.
  @param {Function|Object|string} [predicate=identity] The function called
  per iteration. If a property name or object is provided it will be used
  to create a "_.pluck" or "_.where" style callback respectively.
  @param {*} [thisArg] The `this` binding of `predicate`.
  @returns {*} Returns the matched element, else `undefined`.
  @example
  
  var characters = [
  { 'name': 'barney',  'age': 36 },
  { 'name': 'fred',    'age': 40, 'blocked': true },
  { 'name': 'pebbles', 'age': 1 }
  ];
  
  _.find(characters, function(chr) {
  return chr.age < 40;
  });
  // => { 'name': 'barney', 'age': 36 }
  
  // using "_.where" callback shorthand
  _.find(characters, { 'age': 1 });
  // =>  { 'name': 'pebbles', 'age': 1 }
  
  // using "_.pluck" callback shorthand
  _.find(characters, 'blocked');
  // => { 'name': 'fred', 'age': 40, 'blocked': true }