deep-mix.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. var isPlainObject = require('./type/is-plain-object');
  2. var isArray = require('./type/is-array');
  3. var MAX_MIX_LEVEL = 5;
  4. function _deepMix(dist, src, level, maxLevel) {
  5. level = level || 0;
  6. maxLevel = maxLevel || MAX_MIX_LEVEL;
  7. for (var key in src) {
  8. if (src.hasOwnProperty(key)) {
  9. var value = src[key];
  10. if (value !== null && isPlainObject(value)) {
  11. if (!isPlainObject(dist[key])) {
  12. dist[key] = {};
  13. }
  14. if (level < maxLevel) {
  15. _deepMix(dist[key], value, level + 1, maxLevel);
  16. } else {
  17. dist[key] = src[key];
  18. }
  19. } else if (isArray(value)) {
  20. dist[key] = [];
  21. dist[key] = dist[key].concat(value);
  22. } else if (value !== undefined) {
  23. dist[key] = value;
  24. }
  25. }
  26. }
  27. }
  28. var deepMix = function deepMix() {
  29. var args = new Array(arguments.length);
  30. var length = args.length;
  31. for (var i = 0; i < length; i++) {
  32. args[i] = arguments[i];
  33. }
  34. var rst = args[0];
  35. for (var _i = 1; _i < length; _i++) {
  36. _deepMix(rst, args[_i]);
  37. }
  38. return rst;
  39. };
  40. module.exports = deepMix;