85 lines
2.6 KiB
TypeScript
85 lines
2.6 KiB
TypeScript
![]() |
/**
|
|||
|
* 随机工具函数库
|
|||
|
* 提供生成随机数、随机字符串、随机数组等功能。
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* 生成一个指定范围内的随机整数 (包含 min 和 max)
|
|||
|
* @param min 最小值 (包含)
|
|||
|
* @param max 最大值 (包含)
|
|||
|
*/
|
|||
|
export const getRandomInt = (min: number, max: number): number => {
|
|||
|
const minimum = Math.ceil(min);
|
|||
|
const maximum = Math.floor(max);
|
|||
|
return Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 生成一个指定长度的随机字符串
|
|||
|
* @param length 随机字符串的长度
|
|||
|
* @param chars 可选,使用的字符集,默认是字母 (大小写) 和数字
|
|||
|
*/
|
|||
|
export const getRandomString = (length: number, chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'): string => {
|
|||
|
let result = '';
|
|||
|
const charsLength = chars.length;
|
|||
|
for (let i = 0; i < length; i++) {
|
|||
|
result += chars.charAt(Math.floor(Math.random() * charsLength));
|
|||
|
}
|
|||
|
return result;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 生成一个随机布尔值 (true 或 false)
|
|||
|
*/
|
|||
|
export const getRandomBoolean = (): boolean => {
|
|||
|
return Math.random() >= 0.5;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 从数组中随机选取一个值
|
|||
|
* @param array 要随机提取的数组
|
|||
|
*/
|
|||
|
export const getRandomFromArray = <T>(array: T[]): T => {
|
|||
|
return array[Math.floor(Math.random() * array.length)];
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 打乱一个数组
|
|||
|
* @param array 要打乱的数组
|
|||
|
*/
|
|||
|
export const shuffleArray = <T>(array: T[]): T[] => {
|
|||
|
const shuffled = [...array]; // 创建一个副本以免修改原数组
|
|||
|
for (let i = shuffled.length - 1; i > 0; i--) {
|
|||
|
const j = Math.floor(Math.random() * (i + 1));
|
|||
|
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
|
|||
|
}
|
|||
|
return shuffled;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 生成一个随机的十六进制颜色代码 (如 "#a1b2c3")
|
|||
|
*/
|
|||
|
export const getRandomHexColor = (): string => {
|
|||
|
return `#${Math.floor(Math.random() * 0xffffff).toString(16).padStart(6, '0')}`;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 生成一个随机RGBA颜色
|
|||
|
* @param alpha 可选,透明度 (范围 0-1)
|
|||
|
*/
|
|||
|
export const getRandomRGBAColor = (alpha: number = 1): string => {
|
|||
|
const r = getRandomInt(0, 255);
|
|||
|
const g = getRandomInt(0, 255);
|
|||
|
const b = getRandomInt(0, 255);
|
|||
|
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 随机延迟一段时间 (返回一个 Promise,在随机时间后 resolve)
|
|||
|
* @param min 最小延迟时间 (毫秒)
|
|||
|
* @param max 最大延迟时间 (毫秒)
|
|||
|
*/
|
|||
|
export const randomDelay = (min: number, max: number): Promise<void> => {
|
|||
|
const delay = getRandomInt(min, max);
|
|||
|
return new Promise(resolve => setTimeout(resolve, delay));
|
|||
|
};
|