geek.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /**
  2. * 通配符比较
  3. * @param {*} str 待比较的字符串
  4. * @param {*} pattern 含有*或者?通配符的字符串
  5. * @returns
  6. */
  7. export function wildcardCompare(str: string, pattern: string): boolean {
  8. const regex = pattern.replace(/[*?]/g, (match) => {
  9. if (match === '*') {
  10. return '.*';
  11. } else if (match === '?') {
  12. return '.';
  13. } else {
  14. return match
  15. }
  16. });
  17. const regexPattern = new RegExp('^' + regex + '$');
  18. return regexPattern.test(str);
  19. }
  20. /**
  21. * 深度复制
  22. * @param obj 待复制的对象
  23. * @returns 复制的对象
  24. */
  25. export function deepClone(obj: any) {
  26. if (obj == null || typeof obj !== 'object') {
  27. return obj;
  28. }
  29. let result;
  30. if (Array.isArray(obj)) {
  31. result = [];
  32. } else {
  33. result = new Map();
  34. }
  35. for (let [key, value] of Object.entries(obj)) {
  36. // @ts-ignore
  37. result[key] = deepClone(value);
  38. }
  39. return result;
  40. }
  41. /**
  42. * 深度复制
  43. * @param obj 待复制的对象
  44. * @param result 要复制到的对象
  45. * @returns 复制的对象
  46. */
  47. export function deepCloneTo<T>(obj: T, result: T) {
  48. if (obj == null || typeof obj !== 'object') {
  49. return obj;
  50. }
  51. for (let [key, value] of Object.entries(obj)) {
  52. // @ts-ignore
  53. result[key] = deepClone(value);
  54. }
  55. return result;
  56. }
  57. /**
  58. * 获取uuid
  59. * @returns 生成的uuid字符串
  60. */
  61. export function generateUUID(): string {
  62. let uuid = '';
  63. const chars = '0123456789abcdef';
  64. for (let i = 0; i < 32; i++) {
  65. if (i === 8 || i === 12 || i === 16 || i === 20) {
  66. uuid += '-';
  67. }
  68. uuid += chars[Math.floor(Math.random() * chars.length)];
  69. }
  70. return uuid;
  71. }