Advertisement
Guest User

Untitled

a guest
Aug 24th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. function deepClone(val) {
  2. if (!isObject(val)) {
  3. return val;
  4. }
  5.  
  6. if (val instanceof Array) {
  7. return val.map(deepClone);
  8. }
  9.  
  10. var clone = {};
  11. var prop;
  12.  
  13. for (prop in val) {
  14. clone[prop] = deepClone(val[prop]);
  15. }
  16.  
  17. return clone;
  18. }
  19.  
  20. function assert(condition) {
  21. if (!condition) {
  22. throw new Error('Assertion failed');
  23. }
  24. }
  25.  
  26. function isObject(val) {
  27. return typeof val === 'object' && val !== null;
  28. }
  29.  
  30. function deepEquals(val1, val2) {
  31. if (val1 instanceof Array) {
  32. if (!(val2 instanceof Array) || val1.length !== val2.length) {
  33. return false;
  34. }
  35.  
  36. return val1.every(function (val1Item, index) {
  37. return deepEquals(val1Item, val2[index]);
  38. });
  39. }
  40.  
  41. if (!isObject(val1) || !isObject(val2)) {
  42. return val1 === val2;
  43. }
  44.  
  45. var val1Keys = Object.keys(val1);
  46.  
  47. if (val1Keys.length !== Object.keys(val2).length) {
  48. return false;
  49. }
  50.  
  51. return val1Keys.every(function (val1Key) {
  52. return val2.hasOwnProperty(val1Key) && deepEquals(val1[val1Key], val2[val1Key]);
  53. });
  54. }
  55.  
  56. var data = {
  57. name: 'Paddy',
  58. address: {
  59. town: 'Lerum',
  60. country: 'Sweden'
  61. }
  62. };
  63.  
  64. var clone = deepClone(data);
  65.  
  66. assert(deepEquals(data, clone));
  67.  
  68. clone.address.street = 'Test street';
  69.  
  70. assert(!deepEquals(data, clone));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement