Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

58 строки
1.0 KiB

  1. /**
  2. * Module dependencies.
  3. */
  4. var type;
  5. try {
  6. type = require('component-type');
  7. } catch (_) {
  8. type = require('type');
  9. }
  10. /**
  11. * Module exports.
  12. */
  13. module.exports = clone;
  14. /**
  15. * Clones objects.
  16. *
  17. * @param {Mixed} any object
  18. * @api public
  19. */
  20. function clone(obj){
  21. switch (type(obj)) {
  22. case 'object':
  23. var copy = {};
  24. for (var key in obj) {
  25. if (obj.hasOwnProperty(key)) {
  26. copy[key] = clone(obj[key]);
  27. }
  28. }
  29. return copy;
  30. case 'array':
  31. var copy = new Array(obj.length);
  32. for (var i = 0, l = obj.length; i < l; i++) {
  33. copy[i] = clone(obj[i]);
  34. }
  35. return copy;
  36. case 'regexp':
  37. // from millermedeiros/amd-utils - MIT
  38. var flags = '';
  39. flags += obj.multiline ? 'm' : '';
  40. flags += obj.global ? 'g' : '';
  41. flags += obj.ignoreCase ? 'i' : '';
  42. return new RegExp(obj.source, flags);
  43. case 'date':
  44. return new Date(obj.getTime());
  45. default: // string, number, boolean, …
  46. return obj;
  47. }
  48. }