util.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // 防抖函数
  2. function debounce(func, wait) {
  3. let timeout;
  4. return function (...args) { // 使用剩余参数语法接收所有传入的参数
  5. clearTimeout(timeout); // 清除上一个定时器
  6. timeout = setTimeout(() => {
  7. func.apply(this, args); // 使用apply来调用原始函数,并传入当前this值和所有参数
  8. }, wait);
  9. };
  10. }
  11. // 获取页面元素
  12. const getElement = (id) => {
  13. const element = echarts.init(
  14. document.getElementById(id)
  15. );
  16. return element
  17. }
  18. // 获取url参数
  19. const getQueryString = () => {
  20. let urlStr = window.location.href.split("?")[1];
  21. const urlSearchParams = new URLSearchParams(urlStr);
  22. const result = Object.fromEntries(urlSearchParams.entries());
  23. return result;
  24. }
  25. // 辅助方法:判断是否为对象(非 null 且不是数组)
  26. const isObject = (obj) => {
  27. return obj !== null && typeof obj === 'object' && !Array.isArray(obj);
  28. }
  29. // 深度比较两个对象是否相同
  30. const isObjectEqual = (obj1, obj2) => {
  31. const keys1 = Object.keys(obj1);
  32. const keys2 = Object.keys(obj2);
  33. if (keys1.length !== keys2.length) return false;
  34. for (const key of keys1) {
  35. const val1 = obj1[key];
  36. const val2 = obj2[key];
  37. if (typeof val1 !== typeof val2) return false;
  38. if (Array.isArray(val1) && Array.isArray(val2)) {
  39. if (!isArrayEqual(val1, val2)) return false;
  40. } else if (isObject(val1) && isObject(val2)) {
  41. if (!isObjectEqual(val1, val2)) return false;
  42. } else {
  43. if (val1 !== val2) return false;
  44. }
  45. }
  46. return true;
  47. }
  48. const isArrayEqual = (arr1, arr2) => {
  49. // 先判断类型
  50. if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false;
  51. if (arr1.length !== arr2.length) return false;
  52. for (let i = 0; i < arr1.length; i++) {
  53. const val1 = arr1[i];
  54. const val2 = arr2[i];
  55. if (typeof val1 !== typeof val2) return false;
  56. if (Array.isArray(val1) && Array.isArray(val2)) {
  57. // 递归比较数组
  58. if (!isArrayEqual(val1, val2)) return false;
  59. } else if (isObject(val1) && isObject(val2)) {
  60. // 比较对象
  61. if (!isObjectEqual(val1, val2)) return false;
  62. } else {
  63. // 其他类型(如字符串、数字、布尔)直接比较
  64. if (val1 !== val2) return false;
  65. }
  66. }
  67. return true;
  68. }
  69. // 格式化日期
  70. const formatDate = (t, str) => {
  71. var obj = {
  72. yyyy: t.getFullYear(),
  73. yy: ("" + t.getFullYear()).slice(-2),
  74. M: t.getMonth() + 1,
  75. MM: ("0" + (t.getMonth() + 1)).slice(-2),
  76. d: t.getDate(),
  77. dd: ("0" + t.getDate()).slice(-2),
  78. H: t.getHours(),
  79. HH: ("0" + t.getHours()).slice(-2),
  80. h: t.getHours() % 12,
  81. hh: ("0" + (t.getHours() % 12)).slice(-2),
  82. m: t.getMinutes(),
  83. mm: ("0" + t.getMinutes()).slice(-2),
  84. s: t.getSeconds(),
  85. ss: ("0" + t.getSeconds()).slice(-2)
  86. };
  87. return str.replace(/([a-z]+)/ig, function ($1) {
  88. return obj[$1];
  89. });
  90. }