size.js
 1  var baseKeys = require('./_baseKeys'),
 2      getTag = require('./_getTag'),
 3      isArrayLike = require('./isArrayLike'),
 4      isString = require('./isString'),
 5      stringSize = require('./_stringSize');
 6  
 7  /** `Object#toString` result references. */
 8  var mapTag = '[object Map]',
 9      setTag = '[object Set]';
10  
11  /**
12   * Gets the size of `collection` by returning its length for array-like
13   * values or the number of own enumerable string keyed properties for objects.
14   *
15   * @static
16   * @memberOf _
17   * @since 0.1.0
18   * @category Collection
19   * @param {Array|Object|string} collection The collection to inspect.
20   * @returns {number} Returns the collection size.
21   * @example
22   *
23   * _.size([1, 2, 3]);
24   * // => 3
25   *
26   * _.size({ 'a': 1, 'b': 2 });
27   * // => 2
28   *
29   * _.size('pebbles');
30   * // => 7
31   */
32  function size(collection) {
33    if (collection == null) {
34      return 0;
35    }
36    if (isArrayLike(collection)) {
37      return isString(collection) ? stringSize(collection) : collection.length;
38    }
39    var tag = getTag(collection);
40    if (tag == mapTag || tag == setTag) {
41      return collection.size;
42    }
43    return baseKeys(collection).length;
44  }
45  
46  module.exports = size;