@ryanuo/utils
Version:
提供多种实用工具函数,涵盖算法、浏览器操作、网络请求等多个领域
60 lines (59 loc) • 1.52 kB
JavaScript
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);
}
};
}