_baseMerge.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. var Stack = require('./_Stack'),
  2. assignMergeValue = require('./_assignMergeValue'),
  3. baseFor = require('./_baseFor'),
  4. baseMergeDeep = require('./_baseMergeDeep'),
  5. isObject = require('./isObject'),
  6. keysIn = require('./keysIn');
  7. /**
  8. * The base implementation of `_.merge` without support for multiple sources.
  9. *
  10. * @private
  11. * @param {Object} object The destination object.
  12. * @param {Object} source The source object.
  13. * @param {number} srcIndex The index of `source`.
  14. * @param {Function} [customizer] The function to customize merged values.
  15. * @param {Object} [stack] Tracks traversed source values and their merged
  16. * counterparts.
  17. */
  18. function baseMerge(object, source, srcIndex, customizer, stack) {
  19. if (object === source) {
  20. return;
  21. }
  22. baseFor(source, function(srcValue, key) {
  23. if (isObject(srcValue)) {
  24. stack || (stack = new Stack);
  25. baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
  26. }
  27. else {
  28. var newValue = customizer
  29. ? customizer(object[key], srcValue, (key + ''), object, source, stack)
  30. : undefined;
  31. if (newValue === undefined) {
  32. newValue = srcValue;
  33. }
  34. assignMergeValue(object, key, newValue);
  35. }
  36. }, keysIn);
  37. }
  38. module.exports = baseMerge;