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);
});