Skip to content

Instantly share code, notes, and snippets.

@cyrilf
Created June 11, 2013 16:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save cyrilf/5758397 to your computer and use it in GitHub Desktop.
Save cyrilf/5758397 to your computer and use it in GitHub Desktop.
Helper functions in JavaScript
/**
* hasNestedProperties check if an object has the nested
* properties passed in params
*
* @param {Object} obj object we want to test
* @param {String} properties nested property we want
* @return {Boolean} either the object has these
* nested properties or not
*/
function hasNestedProperties(obj, properties) {
var properties = properties.split('.');
var property;
// For each properties, check if it's an object property
for(var i = 0, l = properties.length; i < l; i++) {
property = properties[i];
if(!obj.hasOwnProperty(property)) {
return false;
}
obj = obj[property];
}
return true;
}
/**
* Use cases:
var jSnow = {
name: {
firstname: 'Jon',
lastname: 'Snow'
}
};
var firstName = hasNestedProperties(jSnow, 'name.firstname'); // = true
var familyName = hasNestedProperties(jSnow, 'name.familyName'); // = false
var deepNested = hasNestedProperties(jSnow, 'someRandom.property.unexistent'); // = false
* It avoids syntax like:
if(jSnow.name && jSnow.name.firstname && jSnow.name.firstname.whatever && ...) {
console.log(jSnow.name.firstname.whatever);
}
*/
@christophehurpeau
Copy link

function hasNestedProperties(obj, properties) {
    // For each properties, check if it's an object property
    properties.split('.').forEach(function(property) {
        if (!obj.hasOwnProperty(property)) {
            return false;
        }
        obj = obj[property];
    }

    return true;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment