Helpers.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import debounce from './Debounce'
  2. export default class Helpers {
  3. constructor(Dcat) {
  4. Dcat.helpers = this;
  5. // 延迟触发,消除重复触发
  6. this.debounce = debounce;
  7. }
  8. /**
  9. * 获取json对象或数组的长度
  10. *
  11. * @param obj
  12. * @returns {number}
  13. */
  14. len(obj) {
  15. if (typeof obj !== 'object') {
  16. return 0;
  17. }
  18. let i, len = 0;
  19. for(i in obj) {
  20. len += 1;
  21. }
  22. return len;
  23. }
  24. /**
  25. * 判断变量或key是否存在
  26. *
  27. * @param _var
  28. * @param key
  29. * @returns {boolean}
  30. */
  31. isset(_var, key) {
  32. let isset = (typeof _var !== 'undefined' && _var !== null);
  33. if (typeof key === 'undefined') {
  34. return isset;
  35. }
  36. return isset && typeof _var[key] !== 'undefined';
  37. };
  38. empty(obj, key) {
  39. return !(this.isset(obj, key) && obj[key]);
  40. };
  41. /**
  42. * 根据key获取对象的值,支持获取多维数据
  43. *
  44. * @param arr
  45. * @param key
  46. * @param def
  47. * @returns {null|*}
  48. */
  49. get(arr, key, def) {
  50. def = null;
  51. if (this.len(arr) < 1) {
  52. return def;
  53. }
  54. key = String(key).split('.');
  55. for (var i = 0; i < key.length; i++) {
  56. if (this.isset(arr, key[i])) {
  57. arr = arr[key[i]];
  58. } else {
  59. return def;
  60. }
  61. }
  62. return arr;
  63. }
  64. /**
  65. * 判断key是否存在
  66. *
  67. * @param arr
  68. * @param key
  69. * @returns {def|boolean}
  70. */
  71. has(arr, key) {
  72. if (LA.len(arr) < 1) return def;
  73. key = String(key).split('.');
  74. for (var i = 0; i < key.length; i++) {
  75. if (LA.isset(arr, key[i])) {
  76. arr = arr[key[i]];
  77. } else {
  78. return false;
  79. }
  80. }
  81. return true;
  82. }
  83. /**
  84. * 判断元素是否在对象中存在
  85. *
  86. * @param arr
  87. * @param val
  88. * @param strict
  89. * @returns {boolean}
  90. */
  91. inObject(arr, val, strict) {
  92. if (this.len(arr) < 1) {
  93. return false;
  94. }
  95. for (var i in arr) {
  96. if (strict) {
  97. if (val === arr[i]) {
  98. return true;
  99. }
  100. continue
  101. }
  102. if (val == arr[i]) {
  103. return true;
  104. }
  105. }
  106. return false;
  107. }
  108. // 判断对象是否相等
  109. equal(array, array2, strict) {
  110. if (!array || !array2) {
  111. return false;
  112. }
  113. let len1 = this.len(array),
  114. len2 = this.len(array2), i;
  115. if (len1 != len2) {
  116. return false;
  117. }
  118. for (i in array) {
  119. if (! this.isset(array2, i)) {
  120. return false;
  121. }
  122. if (array[i] === null && array2[i] === null) {
  123. return true;
  124. }
  125. if (typeof array[i] == 'object' && typeof array2[i] == 'object') {
  126. if (! this.equal(array[i], array2[i], strict))
  127. return false;
  128. }
  129. else if (array[i] != array2[i]) {
  130. return false;
  131. }
  132. }
  133. return true;
  134. }
  135. // 字符串替换
  136. replace(str, replace, subject) {
  137. if (!str) {
  138. return str;
  139. }
  140. return str.replace(
  141. new RegExp(replace, "g"),
  142. subject
  143. );
  144. }
  145. }