U_Object.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. /*
  2. IBM Confidential
  3. OCO Source Materials
  4. IBM Cognos Products: rs
  5. (C) Copyright IBM Corp. 2018
  6. The source code for this program is not published or otherwise divested of its trade secrets, irrespective of what has been deposited with the U.S. Copyright Office.
  7. */
  8. define([], function() {
  9. var U_Object = {};
  10. /**
  11. * Determine if the object has any keys.
  12. * @param {Object} o An object.
  13. * @type Boolean
  14. * @returns True if the object is empty.
  15. */
  16. U_Object.F_IsEmpty = function( o )
  17. {
  18. for ( var s in o )
  19. {
  20. return false;
  21. }
  22. return true;
  23. };
  24. /**
  25. * Convert the object to an array of the values.
  26. * Each value becomes an item in the array.
  27. * @param {Object} o An object.
  28. * @type Array
  29. * @returns The array.
  30. */
  31. U_Object.F_ToValueArray = Object.values ?
  32. function( o )
  33. {
  34. return Object.values( o );
  35. }
  36. :
  37. function( o )
  38. {
  39. var a = [];
  40. for ( var s in o )
  41. {
  42. a.push( o[s] );
  43. }
  44. return a;
  45. };
  46. /**
  47. * Count the number of keys in the object.
  48. * @param {Object} o An object.
  49. * @type Integer
  50. * @returns The number of keys in the object.
  51. */
  52. U_Object.F_GetLength = function( o )
  53. {
  54. var i = 0;
  55. for ( var s in o )
  56. {
  57. i++;
  58. }
  59. return i;
  60. };
  61. /**
  62. * Simple copy
  63. * @param {Object} o An Object to copy
  64. * @type {Object}
  65. * @returns The copy.
  66. */
  67. U_Object.F_Copy = Object.assign ?
  68. function( o )
  69. {
  70. return Object.assign( {}, o );
  71. }
  72. :
  73. function( o )
  74. {
  75. var v_oCopy = {};
  76. for ( var s in o )
  77. {
  78. v_oCopy[s] = o[s];
  79. }
  80. return v_oCopy;
  81. };
  82. U_Object.F_TypeOf = function( v )
  83. {
  84. var s = typeof v;
  85. if ( s == "object" )
  86. {
  87. if ( !v )
  88. {
  89. return "null";
  90. }
  91. if ( Array.isArray(v) )
  92. {
  93. return "array";
  94. }
  95. }
  96. return s;
  97. };
  98. /**
  99. * Simple clone
  100. * @param {Object} o An Object to clone
  101. * @type {Object}
  102. * @returns The clone.
  103. */
  104. U_Object.F_Clone = function( o )
  105. {
  106. switch ( this.F_TypeOf( o ) )
  107. {
  108. case "number":
  109. case "string":
  110. case "boolean":
  111. case "undefined":
  112. return o;
  113. case "object":
  114. var v_oClone = {};
  115. for ( var s in o )
  116. {
  117. if ( o.hasOwnProperty( s ) )
  118. {
  119. v_oClone[s] = this.F_Clone( o[s] );
  120. }
  121. }
  122. return v_oClone;
  123. case "array":
  124. var v_aClone = [];
  125. var v_iLength = o.length;
  126. for ( var i = 0; i < v_iLength; i++ )
  127. {
  128. v_aClone[i] = this.F_Clone( o[i] );
  129. }
  130. return v_aClone;
  131. case "function":
  132. // Not supported
  133. }
  134. };
  135. /**
  136. * Subtract values (o1 - o2)
  137. * @param {Object} o1 An Object
  138. * @param {Object} o2 An Object to subtract
  139. * @type {Object}
  140. * @returns A new object without the subtracted values.
  141. */
  142. U_Object.F_Subtract = function( o1, o2 )
  143. {
  144. var v_oNew = this.F_Copy( o1 );
  145. for ( var s in o2 )
  146. {
  147. delete v_oNew[s];
  148. }
  149. return v_oNew;
  150. };
  151. U_Object.F_Compare = function( o1, o2 )
  152. {
  153. if (this.F_GetLength(o1) != this.F_GetLength(o2))
  154. {
  155. return false;
  156. }
  157. for (var v_sPropName in o1)
  158. {
  159. if (typeof o2[v_sPropName] === "undefined")
  160. {
  161. return false;
  162. }
  163. var v_oVal1 = o1[v_sPropName];
  164. var v_oVal2 = o2[v_sPropName];
  165. var v_bEqual = false;
  166. switch (typeof o1[v_sPropName])
  167. {
  168. case "object":
  169. v_bEqual = this.F_Compare(v_oVal1, v_oVal2);
  170. break;
  171. case "function":
  172. v_bEqual = v_oVal1.toString() === v_oVal2.toString();
  173. break;
  174. default:
  175. v_bEqual = v_oVal1 === v_oVal2;
  176. break;
  177. }
  178. if (!v_bEqual)
  179. {
  180. return false;
  181. }
  182. }
  183. return true;
  184. };
  185. return U_Object;
  186. });