utils-deep-set
Version:
Deep set a nested property.
51 lines (45 loc) • 1.04 kB
JavaScript
;
/**
* FUNCTION: deepSet( obj, props, create, value )
* Deep sets a nested property.
*
* @param {Object|Array} obj - input object
* @param {Array} props - list of properties defining a key path
* @param {Boolean} create - boolean indicating whether to create a path if the key path does not already exist
* @param {*} value - value to set
* @returns {Boolean} boolean indicating if the property was successfully set
*/
function deepSet( obj, props, create, val ) {
var len = props.length,
bool = false,
v = obj,
p,
i;
for ( i = 0; i < len; i++ ) {
p = props[ i ];
if ( typeof v === 'object' && v !== null ) {
if ( !v.hasOwnProperty( p ) ) {
if ( create ) {
v[ p ] = {};
} else {
break;
}
}
if ( i === len-1 ) {
if ( typeof val === 'function' ) {
v[ p ] = val( v[ p ] );
} else {
v[ p ] = val;
}
bool = true;
} else {
v = v[ p ];
}
} else {
break;
}
}
return bool;
} // end FUNCTION deepSet()
// EXPORTS //
module.exports = deepSet;