getObjectProperty

by Arnaud Buchholz

JavaScript

function getObjectProperty(obj, path) {
  var current = obj;
	path.split(".").every(function (name) {
  	current = current[name];
    return current !== undefined;
  });
  return current;  
}

// Minimalist testing framework

function assert(condition) {
	if (!condition) {
  	throw "Assertion failed";
  }
}

function it(label, callback) {
	var line = document.createElement("div"),
  	  span;
  line.appendChild(document.createTextNode(label + ":"));
  span = line.appendChild(document.createElement("span"));
  try {
  	callback();
    span.style.color = "green";
    span.innerHTML = "OK";
  } catch (e) {
    span.style.color = "red";
    span.innerHTML = "KO";
  }
  document.body.appendChild(line);
}

// test cases

var root = {
	test: 1,
  sub: {
  	test: 2
  }
};

it("returns an existing property", function () {
	assert(getObjectProperty(root, "test") === 1);
});

it("returns undefined on a non-existing property", function () {
	assert(getObjectProperty(root, "tset") === undefined);
});

it("returns an existing property on sub levels", function () {
	assert(getObjectProperty(root, "sub.test") === 2);
});

it("returns undefined on a non-existing property (deep)", function () {
	assert(getObjectProperty(root, "sub.tset") === undefined);
});