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