checknested efficiency (v14)

Revision 14 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 checkNestedCatch(obj /*, level1, level2, ... levelN*/ ) {
   arguments = obj.split(".");
    obj = eval(arguments[0] + " || {} ");
    for (var i = 1; i < arguments.length; 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
try-catch
checkNestedCatch('test.level1.level2.level3'); // true
checkNestedCatch('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.