Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

3 lat temu
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. 'use strict';
  2. /**
  3. * Module dependenices
  4. */
  5. var utils = require('./utils');
  6. /**
  7. * Recursively clone native types.
  8. */
  9. function cloneDeep(val, instanceClone) {
  10. switch (utils.typeOf(val)) {
  11. case 'object':
  12. return cloneObjectDeep(val, instanceClone);
  13. case 'array':
  14. return cloneArrayDeep(val, instanceClone);
  15. default:
  16. return utils.clone(val);
  17. }
  18. }
  19. function cloneObjectDeep(obj, instanceClone) {
  20. if (utils.isObject(obj)) {
  21. var res = {};
  22. utils.forOwn(obj, function(obj, key) {
  23. this[key] = cloneDeep(obj, instanceClone);
  24. }, res);
  25. return res;
  26. } else if (instanceClone) {
  27. return instanceClone(obj);
  28. } else {
  29. return obj;
  30. }
  31. }
  32. function cloneArrayDeep(arr, instanceClone) {
  33. var len = arr.length, res = [];
  34. var i = -1;
  35. while (++i < len) {
  36. res[i] = cloneDeep(arr[i], instanceClone);
  37. }
  38. return res;
  39. }
  40. /**
  41. * Expose `cloneDeep`
  42. */
  43. module.exports = cloneDeep;