Skip to content

Instantly share code, notes, and snippets.

@tilap
Forked from cyrilf/hasNestedProperties.js
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tilap/d225dd35fa674353d668 to your computer and use it in GitHub Desktop.
Save tilap/d225dd35fa674353d668 to your computer and use it in GitHub Desktop.
JS function to check if an object has the nested properties
/**
* 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);
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment