UNPKG

1.03 kBJavaScriptView Raw
1var hasOwn = require('./hasOwn');
2var deepClone = require('../lang/deepClone');
3var isObject = require('../lang/isObject');
4
5 /**
6 * Deep merge objects.
7 */
8 function merge() {
9 var i = 1,
10 key, val, obj, target;
11
12 // make sure we don't modify source element and it's properties
13 // objects are passed by reference
14 target = deepClone( arguments[0] );
15
16 while (obj = arguments[i++]) {
17 for (key in obj) {
18 if ( ! hasOwn(obj, key) ) {
19 continue;
20 }
21
22 val = obj[key];
23
24 if ( isObject(val) && isObject(target[key]) ){
25 // inception, deep merge objects
26 target[key] = merge(target[key], val);
27 } else {
28 // make sure arrays, regexp, date, objects are cloned
29 target[key] = deepClone(val);
30 }
31
32 }
33 }
34
35 return target;
36 }
37
38 module.exports = merge;
39
40