00001 var Stack = require('./_Stack'), 00002 assignMergeValue = require('./_assignMergeValue'), 00003 baseFor = require('./_baseFor'), 00004 baseMergeDeep = require('./_baseMergeDeep'), 00005 isObject = require('./isObject'), 00006 keysIn = require('./keysIn'); 00007 00019 function baseMerge(object, source, srcIndex, customizer, stack) { 00020 if (object === source) { 00021 return; 00022 } 00023 baseFor(source, function(srcValue, key) { 00024 if (isObject(srcValue)) { 00025 stack || (stack = new Stack); 00026 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); 00027 } 00028 else { 00029 var newValue = customizer 00030 ? customizer(object[key], srcValue, (key + ''), object, source, stack) 00031 : undefined; 00032 00033 if (newValue === undefined) { 00034 newValue = srcValue; 00035 } 00036 assignMergeValue(object, key, newValue); 00037 } 00038 }, keysIn); 00039 } 00040 00041 module.exports = baseMerge;