/**
* Resolves an Object path given in String format within the given Object.
* @name ish.resolveObjectPath
* @function
* @param {Object} object The object which contains the value you're attempting to resolve.
* @param {String} pathString The path of the value which you are attempting to resolve.
* @return {Object} The resolved value.
* @example
*
* var object = {
* nested: {
* value : 'a nested value',
* array: [1,2,'third',4,5]
* }
* };
*
* var value = ish.resolveObjectPath(object, 'nested.value'); // 'a nested value'
* var arrayValue = ish.resolveObjectPath(object, 'nested.array[3]'); // 'third'
*
*/
$.resolveObjectPath = function(o, s) {
s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
s = s.replace(/^\./, ''); // strip a leading dot
var a = s.split('.');
for (var i = 0, n = a.length; i < n; ++i) {
var k = a[i];
if (k in o) {
o = o[k];
} else {
return;
}
}
return o;
};
/**
* Sets an the value of an Object path given in String format within the given Object.
* @name ish.setPathByString
* @function
* @param {Object} object The object which contains the value you're attempting to set.
* @param {String} pathString The path of the value which you are attempting to set.
* @param {value} value The value you're attempting to set.
* @return {Object} The resolved value.
* @example
*
* var object = {
* nested: {
* value : 'a nested value',
* array: [1,2,'third',4,5]
* }
* };
*
* var value = ish.resolveObjectPath(object, 'nested.value'); // 'a nested value'
* var arrayValue = ish.resolveObjectPath(object, 'nested.array[3]'); // 'third'
*
*/
$.setPathByString = function(object, propertyString, value){
//propertyString = propertyString.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
//propertyString = propertyString.replace(/^\./, ''); // strip a leading dot
var props = propertyString.split('.');
var obj = object;
for (var i = 0; i < props.length; i++) {
if( i === props.length -1) {
obj[props[i]] = value;
return obj[props[i]];
}
if(!obj[props[i]]) {
obj[props[i]] = {};
}
obj = obj[props[i]];
}
};