Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. const
  2. /**
  3. * Getting raw object prototype
  4. * @param target {Object}
  5. * @return {String}
  6. */
  7. getPrototypeName = target => Object.prototype.toString.call(target),
  8.  
  9. /**
  10. * Determines whether target exists or not
  11. * @param target {Object}
  12. * @return {boolean}
  13. */
  14. isset = target => !/(Undefined|Null)/.test(getPrototypeName(target)),
  15.  
  16. /**
  17. * Check if target is Regular Expression
  18. * @param target {Object}
  19. * @return {boolean}
  20. */
  21. isFunction = target => /Function/.test(getPrototypeName(target)),
  22.  
  23. /**
  24. * Check if target is function
  25. * @param target {Object}
  26. * @return {boolean}
  27. */
  28. isRegExp = target => /RegExp/.test(getPrototypeName(target)),
  29.  
  30. /**
  31. * Check if target is string
  32. * @param target {Object}
  33. * @return {boolean}
  34. */
  35. isString = target => /String/.test(getPrototypeName(target)),
  36.  
  37. /**
  38. * Check if target is number
  39. * @param target {Object}
  40. * @return {boolean}
  41. */
  42. isNumber = target => /Number/.test(getPrototypeName(target)),
  43.  
  44. /**
  45. * Check if target is object
  46. * @param target {Object}
  47. * @return {boolean}
  48. */
  49. isObject = target => /Object/.test(getPrototypeName(target)),
  50.  
  51. /**
  52. * Check if object is array
  53. * @param target {Object}
  54. * @return {boolean}
  55. */
  56. isArray = target => /Array/.test(getPrototypeName(target)),
  57.  
  58. /**
  59. * Check if target is empty
  60. * @param target {Object}
  61. * @return {boolean}
  62. */
  63. empty = target => {
  64.  
  65. // Objects
  66. if (isObject(target)) return Object.keys(target).length === 0;
  67.  
  68. // Strings
  69. if (isString(target)) return target.valueOf() === "";
  70.  
  71. // Arrays
  72. if (isArray(target)) return target.length === 0;
  73.  
  74. // Other
  75. return false;
  76. },
  77.  
  78. /**
  79. * Compare two objects
  80. * @param obj1 {Object}
  81. * @param obj2 {Object}
  82. * @return {boolean}
  83. */
  84. equals = (obj1, obj2) => {
  85.  
  86. // Checking if variables can be compared
  87. if (!isset(obj1) || !isset(obj2)) return false;
  88.  
  89. // Checking if objects are of the same type
  90. if (getPrototypeName(obj1) !== getPrototypeName(obj2)) return false;
  91.  
  92. // Checking content equality
  93. switch (true) {
  94.  
  95. // Comparing strings (class String covered)
  96. case isString(obj1): {
  97. return obj1.valueOf() === obj2.valueOf();
  98. }
  99.  
  100. // Comparing arrays (strict order)
  101. case isArray(obj1): {
  102. // Checking size of arrays
  103. if (obj1.length !== obj2.length) return false;
  104.  
  105. // Checking all items
  106. for (let i = 0; i < obj2.length; i++)
  107. if (!equals(obj1[i], obj2[i])) return false;
  108.  
  109. return true;
  110. }
  111.  
  112. // Comparing objects
  113. case isObject(obj1): {
  114. // Checking size of arrays
  115. if (Object.keys(obj1).length !== Object.keys(obj2).length) return false;
  116.  
  117. // Checking all items
  118. for (let key in obj1) { // Not checking null values of the keys
  119. if (!obj2.hasOwnProperty(key) || !equals(obj1[key], obj2[key])) return false;
  120. }
  121.  
  122. return true;
  123. }
  124.  
  125. default: {
  126. return obj1 === obj2;
  127. }
  128. }
  129. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement