Last active
May 9, 2017 08:37
-
-
Save kyrene-chew/c70b7d58bc04408c303d740815b842f3 to your computer and use it in GitHub Desktop.
TypeScript - Get object and their values with validation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Checks through entire datalayer object tree to see if object value exists | |
* sample usage: getObject(object, 'object.key1.key2.key3') | |
* @param {object} datalayer - datalayer object | |
* @param {string} objectKey? - optional | |
* @returns {string} returns value | |
*/ | |
export function getObjectValue(datalayer: object, objectKey?: string): string { | |
const object = objectCheck(datalayer, objectKey); | |
if (typeof object === 'string') { | |
return object; | |
} | |
return null; | |
} | |
/** | |
* Checks through entire datalayer object tree to see if object exists | |
* sample usage: getObject(object.key) | |
* @param {object} datalayer - datalayer object | |
* @param {string} objectKey? - optional | |
* @returns {any} returns object by key | |
*/ | |
export function getObject(datalayer: object, objectKey?: string): any { | |
return objectCheck(datalayer, objectKey); | |
} | |
/** | |
* Main logic for getting object or string value from object key | |
* @param {object} datalayer | |
* @param {string} objectKey? - optional | |
* @returns {any} current - returns either string or object | |
*/ | |
const objectCheck = (datalayer: object, objectKey?: string): any => { | |
// if datalayer doesn't exists, just return | |
if (!datalayer) { | |
return null; | |
} | |
// default return datalayer | |
let current = datalayer; | |
// check every layer | |
if (typeof objectKey === 'string') { | |
const numberOfObjectHierarchy = objectKey.match(/\./g).length; | |
for (let i = 1; i <= numberOfObjectHierarchy; i++) { | |
const currentKey = objectKey.split(/\./)[i]; | |
if (typeof current[currentKey] === 'undefined') { | |
return null; | |
} | |
current = current[currentKey]; | |
} | |
} | |
return current; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment