merge.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. var baseMerge = require('../internal/baseMerge'),
  2. createAssigner = require('../internal/createAssigner');
  3. /**
  4. * Recursively merges own enumerable properties of the source object(s), that
  5. * don't resolve to `undefined` into the destination object. Subsequent sources
  6. * overwrite property assignments of previous sources. If `customizer` is
  7. * provided it's invoked to produce the merged values of the destination and
  8. * source properties. If `customizer` returns `undefined` merging is handled
  9. * by the method instead. The `customizer` is bound to `thisArg` and invoked
  10. * with five arguments: (objectValue, sourceValue, key, object, source).
  11. *
  12. * @static
  13. * @memberOf _
  14. * @category Object
  15. * @param {Object} object The destination object.
  16. * @param {...Object} [sources] The source objects.
  17. * @param {Function} [customizer] The function to customize assigned values.
  18. * @param {*} [thisArg] The `this` binding of `customizer`.
  19. * @returns {Object} Returns `object`.
  20. * @example
  21. *
  22. * var users = {
  23. * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
  24. * };
  25. *
  26. * var ages = {
  27. * 'data': [{ 'age': 36 }, { 'age': 40 }]
  28. * };
  29. *
  30. * _.merge(users, ages);
  31. * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
  32. *
  33. * // using a customizer callback
  34. * var object = {
  35. * 'fruits': ['apple'],
  36. * 'vegetables': ['beet']
  37. * };
  38. *
  39. * var other = {
  40. * 'fruits': ['banana'],
  41. * 'vegetables': ['carrot']
  42. * };
  43. *
  44. * _.merge(object, other, function(a, b) {
  45. * if (_.isArray(a)) {
  46. * return a.concat(b);
  47. * }
  48. * });
  49. * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
  50. */
  51. var merge = createAssigner(baseMerge);
  52. module.exports = merge;