Counting the properties in an Object (v3)

Revision 3 of this benchmark created by Shane Brinkman-Davis Delamore on


Description

Ways of counting the number of properties in an object (added precomputed baseline - SBD)

Setup

function generateObjects(lengths) {
      var objects = []
      for (var i = 0; i < lengths.length; i++) {
        var obj = {};
        var len = lengths[i];
        for (var j = 0;  j < len; j++) {obj[i + "-" + j] = i * len + j; }
        obj.len = len;
        objects.push(obj);
      }
      return objects;
    }
    
    var largeObjects = generateObjects([326, 140, 688, 128, 582, 416, 278, 803, 845]);
    var smallObjects = generateObjects([3, 1, 6, 2, 5, 4, 2, 8, 8]);
    
    function objectLengthCount(object) {
      var length = 0;
      for (var key in object) {++length;}
      return length;
    }
    
    function objectLengthCount1(object) {
      for (var key in object) {return true;}
      return false;
    }
    
    function objectLengthCountHasOwnProperty(object) {
      var length = 0;
      for (var key in object) {
        if (object.hasOwnProperty(key)) ++length;
      }
      return length;
    }
    
    function objectLengthCountHasOwnProperty1(object) {
      for (var key in object) {
        if (object.hasOwnProperty(key)) return true;        
      }
      return false;
    }
    function objectLengthKeys(object) {
      return Object.keys(object).length;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
largeObjects: Object.keys
for (var i = 0; i < largeObjects.length; i++ ) {
  var len = objectLengthKeys( largeObjects[i] );
}
 
ready
largeObjects: counting
for (var i = 0; i < largeObjects.length; i++ ) {
  var len = objectLengthCount( largeObjects[i] );
}
 
ready
largeObjects: precomputed
for (var i = 0; i < largeObjects.length; i++ ) {
  var len = largeObjects[i].len;
}
 
ready
largeObjects: count to 1
for (var i = 0; i < largeObjects.length; i++ ) {
  var hasKeys = objectLengthCount1( largeObjects[i] );
}
 
ready
smallObjects: Object.keys
for (var i = 0; i < smallObjects.length; i++ ) {
  var len = objectLengthKeys( smallObjects[i] );
}
 
ready
smallObjects: counting
for (var i = 0; i < smallObjects.length; i++ ) {
  var len = objectLengthCount( smallObjects[i] );
}
 
ready
smallObjects: count to 1
for (var i = 0; i < smallObjects.length; i++ ) {
  var hasKeys = objectLengthCount1( smallObjects[i] );
}
 
ready
largeObjects: counting with hasOwnProperty
for (var i = 0; i < largeObjects.length; i++ ) {
  var len = objectLengthCountHasOwnProperty( largeObjects[i] );
}
 
ready
smallObjects: counting with hasOwnProperty
for (var i = 0; i < smallObjects.length; i++ ) {
  var len = objectLengthCountHasOwnProperty( smallObjects[i] );
}
 
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by Michael Geary on
  • Revision 2: published by Shane Brinkman-Davis Delamore on
  • Revision 3: published by Shane Brinkman-Davis Delamore on
  • Revision 4: published by Chris Hoffman on