1var 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. */ 8var 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 */ 32function 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 46module.exports = size; 47