UNPKG

utils-deep-set

Version:
51 lines (45 loc) 1.04 kB
'use strict'; /** * 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;