UNPKG

@ryanuo/utils

Version:

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

64 lines (63 loc) 1.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.curry = curry; exports.debounce = debounce; exports.getUuid = getUuid; exports.safeJSONParse = safeJSONParse; exports.throttle = throttle; 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); }); } 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); }; }; } function safeJSONParse(json) { try { return JSON.parse(json); } catch (e) { return null; } } 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); }; } 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); } }; }