deep-mix.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import isArray from './is-array';
  2. import isPlainObject from './is-plain-object';
  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. }
  17. else {
  18. dist[key] = src[key];
  19. }
  20. }
  21. else if (isArray(value)) {
  22. dist[key] = [];
  23. dist[key] = dist[key].concat(value);
  24. }
  25. else if (value !== undefined) {
  26. dist[key] = value;
  27. }
  28. }
  29. }
  30. }
  31. // todo 重写
  32. var deepMix = function (rst) {
  33. var args = [];
  34. for (var _i = 1; _i < arguments.length; _i++) {
  35. args[_i - 1] = arguments[_i];
  36. }
  37. for (var i = 0; i < args.length; i += 1) {
  38. _deepMix(rst, args[i]);
  39. }
  40. return rst;
  41. };
  42. export default deepMix;
  43. //# sourceMappingURL=deep-mix.js.map