30 lines
		
	
	
		
			789 B
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			30 lines
		
	
	
		
			789 B
		
	
	
	
		
			JavaScript
		
	
	
	
|  | import deepClone from "./deepClone"; | ||
|  | 
 | ||
|  | // JS对象深度合并
 | ||
|  | function deepMerge(target = {}, source = {}) { | ||
|  | 	target = deepClone(target); | ||
|  | 	if (typeof target !== 'object' || typeof source !== 'object') return false; | ||
|  | 	for (var prop in source) { | ||
|  | 		if (!source.hasOwnProperty(prop)) continue; | ||
|  | 		if (prop in target) { | ||
|  | 			if (typeof target[prop] !== 'object') { | ||
|  | 				target[prop] = source[prop]; | ||
|  | 			} else { | ||
|  | 				if (typeof source[prop] !== 'object') { | ||
|  | 					target[prop] = source[prop]; | ||
|  | 				} else { | ||
|  | 					if (target[prop].concat && source[prop].concat) { | ||
|  | 						target[prop] = target[prop].concat(source[prop]); | ||
|  | 					} else { | ||
|  | 						target[prop] = deepMerge(target[prop], source[prop]); | ||
|  | 					} | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} else { | ||
|  | 			target[prop] = source[prop]; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return target; | ||
|  | } | ||
|  | 
 | ||
|  | export default deepMerge; |