12345678910111213141516171819202122232425262728293031323334353637383940 |
- var hasOwn = require('./hasOwn');
- var deepClone = require('../lang/deepClone');
- var isObject = require('../lang/isObject');
- /**
- * Deep merge objects.
- */
- function merge() {
- var i = 1,
- key, val, obj, target;
- // make sure we don't modify source element and it's properties
- // objects are passed by reference
- target = deepClone( arguments[0] );
- while (obj = arguments[i++]) {
- for (key in obj) {
- if ( ! hasOwn(obj, key) ) {
- continue;
- }
- val = obj[key];
- if ( isObject(val) && isObject(target[key]) ){
- // inception, deep merge objects
- target[key] = merge(target[key], val);
- } else {
- // make sure arrays, regexp, date, objects are cloned
- target[key] = deepClone(val);
- }
- }
- }
- return target;
- }
- module.exports = merge;
|