I have a problem getting values from deeply nested objects: if one of the properties along the namespace is incorrect|modified|removed, Javascript throws. To avoid this, you can end up with obnoxious validation:
// Trying to get this.data.homeScene.user.name const isValid = ( typeof this.data === 'object' && typeof this.data.homeScene === 'object' && typeof this.data.homeScene.user === 'object' && typeof this.data.homeScene.user.name === 'string' ); if (isValid) { const { name } = this.data.homeScene.user; ... }
What if I made a reusable helper to validate the namespace and return the value?
export default function getNamespace(startObj, path) { const isValidArgs = ( typeof startObj === 'object' && typeof path === 'string' ); if (!isValidArgs) return undefined; const finalValue = path .split('.') .reduce((obj, p) => ((typeof obj === 'object') ? obj[p] : undefined ), startObj);{ return finalValue; }
Now the obnoxious validation looks like this:
// Trying to get this.data.homeScene.user.name const name = getNamespace(this, 'data.homeScene.user.name'); if (name) { ... }