size.js 1.2 KB

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