checknested efficiency (v3)

Revision 3 of this benchmark created on


Setup

function checkNested(obj /*, level1, level2, ... levelN*/ ) {
    var args = Array.prototype.slice.call(arguments),
      obj = args.shift();
  
    for (var i = 0; i < args.length; i++) {
      if (!obj.hasOwnProperty(args[i])) {
        return false;
      }
      obj = obj[args[i]];
    }
    return true;
  }
  
  function checkNestedFast(obj /*, level1, level2, ... levelN*/ ) {
    for (var i = 1; i < arguments.length; i++) {
      if (!obj.hasOwnProperty(arguments[i])) {
        return false;
      }
      obj = obj[arguments[i]];
    }
    return true;
  }
  
  function checkNestedSupaFast(obj /*, level1, level2, ... levelN*/ ) {
    var i;
    for (i = arguments.length - 1; i >= 1; i--) {
      if (!obj.hasOwnProperty(arguments[i])) {
        return false;
      }
      obj = obj[arguments[i]];
    }
    return true;
  }
  
  
  var test = {
    level1: {
      level2: {
        level3: 'level3'
      }
    }
  };

Test runner

Ready to run.

Testing in
TestOps/sec
original
checkNested(test, 'level1', 'level2', 'level3'); // true
checkNested(test, 'level1', 'level2', 'foo'); // false
ready
fast
checkNestedFast(test, 'level1', 'level2', 'level3'); // true
checkNestedFast(test, 'level1', 'level2', 'foo'); // false
ready
supa fast
checkNestedSupaFast(test, 'level1', 'level2', 'level3'); // true
checkNestedSupaFast(test, 'level1', 'level2', 'foo'); // false
ready

Revisions

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