code: function map(collection, callback, thisArg) {
        var length = collection ? collection.length : 0;
        callback = lodash.createCallback(callback, thisArg, 3);
  
        if (typeof length == 'number' && length > -1 && length <= maxSafeInteger) {
          return arrayMap(collection, callback);
        }
        var index = -1,
            result = [];
  
        baseEach(collection, function(value, key, collection) {
          result[++index] = callback(value, key, collection);
        });
        return result;
      }
docs: Creates an array of values by running each element in the collection
  through the callback. The callback is bound to `thisArg` and invoked with
  three arguments; (value, index|key, collection).
  
  If a property name is provided for `callback` the created "_.pluck" style
  callback will return the property value of the given element.
  
  If an object is provided for `callback` the created "_.where" style callback
  will return `true` for elements that have the properties of the given object,
  else `false`.
  
  @static
  @memberOf _
  @alias collect
  @category Collections
  @param {Array|Object|string} collection The collection to iterate over.
  @param {Function|Object|string} [callback=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 `callback`.
  @returns {Array} Returns the new mapped array.
  @example
  
  _.map([1, 2, 3], function(num) { return num * 3; });
  // => [3, 6, 9]
  
  _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
  // => [3, 6, 9] (property order is not guaranteed across environments)
  
  var characters = [
  { 'name': 'barney', 'age': 36 },
  { 'name': 'fred',   'age': 40 }
  ];
  
  // using "_.pluck" callback shorthand
  _.map(characters, 'name');
  // => ['barney', 'fred']