function size(collection) {
      if (collection == null) {
        return 0;
      }
      if (isArrayLike(collection)) {
        var result = collection.length;
        return (result && isString(collection)) ? stringSize(collection) : result;
      }
      if (isObjectLike(collection)) {
        var tag = getTag(collection);
        if (tag == mapTag || tag == setTag) {
          return collection.size;
        }
      }
      return keys(collection).length;
    }
Gets the size of `collection` by returning its length for array-like
values or the number of own enumerable string keyed properties for objects.

@static
@memberOf _
@since 0.1.0
@category Collection
@param {Array|Object} collection The collection to inspect.
@returns {number} Returns the collection size.
@example

_.size([1, 2, 3]);
// => 3

_.size({ 'a': 1, 'b': 2 });
// => 2

_.size('pebbles');
// => 7