@@ -30,51 +30,37 @@ exports.merge = function (target, source, options) {
30
30
if ( typeof source !== 'object' ) {
31
31
if ( Array . isArray ( target ) ) {
32
32
target . push ( source ) ;
33
+ return target ;
33
34
} else if ( typeof target === 'object' ) {
34
- if ( options . plainObjects || options . allowPrototypes || ! has . call ( Object . prototype , source ) ) {
35
- target [ source ] = true ;
36
- }
35
+ source = exports . arrayToObject ( [ source ] , options ) ;
37
36
} else {
38
- return [ target , source ] ;
37
+ target = [ target , source ] ;
38
+ return target ;
39
39
}
40
-
41
- return target ;
42
- }
43
-
44
- if ( typeof target !== 'object' ) {
45
- return [ target ] . concat ( source ) ;
46
- }
47
-
48
- var mergeTarget = target ;
49
- if ( Array . isArray ( target ) && ! Array . isArray ( source ) ) {
50
- mergeTarget = exports . arrayToObject ( target , options ) ;
51
- }
52
-
53
- if ( Array . isArray ( target ) && Array . isArray ( source ) ) {
54
- source . forEach ( function ( item , i ) {
55
- if ( has . call ( target , i ) ) {
56
- if ( target [ i ] && typeof target [ i ] === 'object' ) {
57
- target [ i ] = exports . merge ( target [ i ] , item , options ) ;
58
- } else {
59
- target . push ( item ) ;
60
- }
61
- } else {
62
- target [ i ] = item ;
63
- }
64
- } ) ;
40
+ } else if ( Array . isArray ( target ) &&
41
+ ! Array . isArray ( source ) ) {
42
+ target = exports . arrayToObject ( target , options ) ;
43
+ } else if ( Array . isArray ( source ) && typeof target !== 'object' ) {
44
+ source . splice ( 0 , 0 , target ) ;
45
+ target = source ;
65
46
return target ;
47
+ } else if ( typeof target !== 'object' ) {
48
+ target = exports . arrayToObject ( [ target ] , options ) ;
66
49
}
67
50
68
- return Object . keys ( source ) . reduce ( function ( acc , key ) {
51
+ var keys = Object . keys ( source ) ;
52
+ for ( var i = 0 ; i < keys . length ; ++ i ) {
53
+ var key = keys [ i ] ;
69
54
var value = source [ key ] ;
70
55
71
- if ( has . call ( acc , key ) ) {
72
- acc [ key ] = exports . merge ( acc [ key ] , value , options ) ;
56
+ if ( Object . prototype . hasOwnProperty . call ( target , key ) ) {
57
+ target [ key ] = exports . merge ( target [ key ] , value , options ) ;
73
58
} else {
74
- acc [ key ] = value ;
59
+ target [ key ] = value ;
75
60
}
76
- return acc ;
77
- } , mergeTarget ) ;
61
+ }
62
+
63
+ return target ;
78
64
} ;
79
65
80
66
exports . assign = function assignSingleSource ( target , source ) {
0 commit comments