combine.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import defaultValue from './defaultValue.js';
  2. import defined from './defined.js';
  3. /**
  4. * Merges two objects, copying their properties onto a new combined object. When two objects have the same
  5. * property, the value of the property on the first object is used. If either object is undefined,
  6. * it will be treated as an empty object.
  7. *
  8. * @example
  9. * var object1 = {
  10. * propOne : 1,
  11. * propTwo : {
  12. * value1 : 10
  13. * }
  14. * }
  15. * var object2 = {
  16. * propTwo : 2
  17. * }
  18. * var final = Cesium.combine(object1, object2);
  19. *
  20. * // final === {
  21. * // propOne : 1,
  22. * // propTwo : {
  23. * // value1 : 10
  24. * // }
  25. * // }
  26. *
  27. * @param {Object} [object1] The first object to merge.
  28. * @param {Object} [object2] The second object to merge.
  29. * @param {Boolean} [deep=false] Perform a recursive merge.
  30. * @returns {Object} The combined object containing all properties from both objects.
  31. *
  32. * @exports combine
  33. */
  34. function combine(object1, object2, deep) {
  35. deep = defaultValue(deep, false);
  36. var result = {};
  37. var object1Defined = defined(object1);
  38. var object2Defined = defined(object2);
  39. var property;
  40. var object1Value;
  41. var object2Value;
  42. if (object1Defined) {
  43. for (property in object1) {
  44. if (object1.hasOwnProperty(property)) {
  45. object1Value = object1[property];
  46. if (object2Defined && deep && typeof object1Value === 'object' && object2.hasOwnProperty(property)) {
  47. object2Value = object2[property];
  48. if (typeof object2Value === 'object') {
  49. result[property] = combine(object1Value, object2Value, deep);
  50. } else {
  51. result[property] = object1Value;
  52. }
  53. } else {
  54. result[property] = object1Value;
  55. }
  56. }
  57. }
  58. }
  59. if (object2Defined) {
  60. for (property in object2) {
  61. if (object2.hasOwnProperty(property) && !result.hasOwnProperty(property)) {
  62. object2Value = object2[property];
  63. result[property] = object2Value;
  64. }
  65. }
  66. }
  67. return result;
  68. }
  69. export default combine;