index.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. (function (root, factory) {
  2. if (typeof define === 'function' && define.amd) {
  3. define(factory);
  4. } else if (typeof exports === 'object') {
  5. module.exports = factory();
  6. } else {
  7. root.deepmerge = factory();
  8. }
  9. }(this, function () {
  10. return function deepmerge(target, src) {
  11. var array = Array.isArray(src);
  12. var dst = array && [] || {};
  13. if (array) {
  14. target = target || [];
  15. dst = dst.concat(target);
  16. src.forEach(function(e, i) {
  17. if (typeof dst[i] === 'undefined') {
  18. dst[i] = e;
  19. } else if (typeof e === 'object') {
  20. dst[i] = deepmerge(target[i], e);
  21. } else {
  22. if (target.indexOf(e) === -1) {
  23. dst.push(e);
  24. }
  25. }
  26. });
  27. } else {
  28. if (target && typeof target === 'object') {
  29. Object.keys(target).forEach(function (key) {
  30. dst[key] = target[key];
  31. })
  32. }
  33. Object.keys(src).forEach(function (key) {
  34. if (typeof src[key] !== 'object' || !src[key]) {
  35. dst[key] = src[key];
  36. }
  37. else {
  38. if (!target[key]) {
  39. dst[key] = src[key];
  40. } else {
  41. dst[key] = deepmerge(target[key], src[key]);
  42. }
  43. }
  44. });
  45. }
  46. return dst;
  47. }
  48. }));