time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

size.js (1137B)


      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;