UNPKG

@ryanuo/utils

Version:

提供多种实用工具函数,涵盖算法、浏览器操作、网络请求等多个领域

60 lines (59 loc) 1.52 kB
export function getUuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => { const r = Math.random() * 16 | 0; const v = c === "x" ? r : r & 3 | 8; return v.toString(16); }); } export function curry(fn) { return function curried(...args) { if (args.length >= fn.length) return fn(...args); return function(...nextArgs) { const combinedArgs = [...args, ...nextArgs]; return curried(...combinedArgs); }; }; } export function safeJSONParse(json) { try { return JSON.parse(json); } catch (e) { return null; } } export function debounce(fn, delay, immediate = false) { let timer = null; return (...args) => { if (timer !== null) window.clearTimeout(timer); if (immediate && timer === null) fn(...args); timer = window.setTimeout(() => { if (!immediate) fn(...args); timer = null; }, delay); }; } export function throttle(fn, delay, immediate = true) { let lastExecTime = 0; let timer = null; return (...args) => { const now = Date.now(); const timeSinceLastExec = now - lastExecTime; const execute = () => { fn(...args); lastExecTime = now; }; if (immediate && timeSinceLastExec >= delay) { execute(); } else if (timer === null) { timer = window.setTimeout(() => { if (!immediate || timeSinceLastExec < delay) execute(); timer = null; }, immediate ? delay - timeSinceLastExec : delay); } }; }