code: function (collection, callback, thisArg) {
        var index, iterable = collection, result = iterable;
        if (!iterable) return result;
        if (!objectTypes[typeof iterable]) return result;
        callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);
  
          var ownIndex = -1,
              ownProps = objectTypes[typeof iterable] ? keys(iterable) : [],
              length = ownProps.length;
  
          while (++ownIndex < length) {
            index = ownProps[ownIndex];
            if (callback(iterable[index], index, collection) === false) return result
          }    
        return result
      }
docs: Iterates over an object's own enumerable properties, executing the `callback`
  for each property. The `callback` is bound to `thisArg` and invoked with three
  arguments; (value, key, object). Callbacks may exit iteration early by explicitly
  returning `false`.
  
  @static
  @memberOf _
  @type Function
  @category Objects
  @param {Object} object The object to iterate over.
  @param {Function} [callback=identity] The function called per iteration.
  @param {Mixed} [thisArg] The `this` binding of `callback`.
  @returns {Object} Returns `object`.
  @example
  
  _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
  alert(key);
  });
  // => alerts '0', '1', and 'length' (order is not guaranteed)