index.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. export const timestamp = () => +Date.now();
  2. export const clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n));
  3. export const noop = () => {};
  4. export const now = () => Date.now();
  5. /**
  6. * @description: Set ui mount node
  7. */
  8. export function getPopupContainer(node?: HTMLElement): HTMLElement {
  9. if (node) {
  10. return node.parentNode as HTMLElement;
  11. }
  12. return document.body;
  13. }
  14. /**
  15. * Add the object as a parameter to the URL
  16. * @param baseUrl url
  17. * @param obj
  18. * @returns {string}
  19. * eg:
  20. * let obj = {a: '3', b: '4'}
  21. * setObjToUrlParams('www.baidu.com', obj)
  22. * ==>www.baidu.com?a=3&b=4
  23. */
  24. export function setObjToUrlParams(baseUrl: string, obj: any): string {
  25. let parameters = '';
  26. let url = '';
  27. for (const key in obj) {
  28. parameters += key + '=' + encodeURIComponent(obj[key]) + '&';
  29. }
  30. parameters = parameters.replace(/&$/, '');
  31. if (/\?$/.test(baseUrl)) {
  32. url = baseUrl + parameters;
  33. } else {
  34. url = baseUrl.replace(/\/?$/, '?') + parameters;
  35. }
  36. return url;
  37. }
  38. export function deepMerge<T = any>(src: any, target: any): T {
  39. let key: string;
  40. for (key in target) {
  41. src[key] =
  42. src[key] && src[key].toString() === '[object Object]'
  43. ? deepMerge(src[key], target[key])
  44. : (src[key] = target[key]);
  45. }
  46. return src;
  47. }
  48. /**
  49. * @description: 根据数组中某个对象值去重
  50. */
  51. export function unique<T = any>(arr: T[], key: string): T[] {
  52. const map = new Map();
  53. return arr.filter((item) => {
  54. const _item = item as any;
  55. return !map.has(_item[key]) && map.set(_item[key], 1);
  56. });
  57. }
  58. /**
  59. * @description: es6数组去重复
  60. */
  61. export function es6Unique<T>(arr: T[]): T[] {
  62. return Array.from(new Set(arr));
  63. }
  64. export function openWindow(
  65. url: string,
  66. opt?: { target?: TargetContext | string; noopener?: boolean; noreferrer?: boolean }
  67. ) {
  68. const { target = '__blank', noopener = true, noreferrer = true } = opt || {};
  69. const feature: string[] = [];
  70. noopener && feature.push('noopener=yes');
  71. noreferrer && feature.push('noreferrer=yes');
  72. window.open(url, target, feature.join(','));
  73. }