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;
							 |