Appearance
ts
import type { AnyObject } from '@/interface/global';
/**
* @description: 判断对象是否为空
* @param {object} obj 对象
* @return {boolean} 是否为空
*/
export function isNullObj(obj: AnyObject): boolean {
return JSON.stringify(obj) === '{}';
}
/**
* 首字母大写
* @param keyword 需要转化的单词
*/
export function firstToUpperCase(keyword: string) {
return keyword.slice(0, 1).toUpperCase() + keyword.slice(1);
}
/**
* 判断是否是一个纯粹的对象(排除数组)
* @returns boolean
*/
export function isPureObject(obj: AnyObject) {
return typeof obj === 'object' && !Array.isArray(obj);
}
/**
* 模拟延迟
* @param time 时间,默认 2000ms
*/
export function mockDelay(time = 2000) {
return new Promise((resolve) => {
setTimeout(() => {
resolve({});
}, time);
});
}
/**
* 生成唯一值
* @param length 生成唯一值的长度:默认5,最短3,最长11
* @returns string
*/
export function randomID(length = 8) {
return Math.random()
.toString(36)
.slice(-Math.max(3, Math.min(length, 11)));
}
/**
* @description: 判断数字是否为安全类型,是则返回number类型,不是则返回string类型
* @param {string | number} key
* @return number|string
*/
export function safeKey(key: string | number) {
const numKey = Number.parseInt(key as string, 10);
return Number.isSafeInteger(numKey) ? numKey : key;
}
/**
* 复制文本到剪切板
* @param text 文本信息
*/
export const copyToClipboard = (text: string) => navigator.clipboard.writeText(text);
/**
* 将rgb颜色灰度值(基于光感加权平均)
*/
export function gray(r: number, g: number, b: number) {
return Math.round(0.2126 * r + 0.7152 * g + 0.0722 * b);
}
/**
* 解析url中的参数
* @param url 地址
* http://a.com/abc?a=1&b=2
* a=1&b=2
*/
export function parseQuery<R extends AnyObject>(url: string): R {
const q: AnyObject = {};
url.replace(/([^?&=]+)=([^&]+)/g, (_, k, v) => (q[k] = v));
return q;
}
/**
* 挑选对象属性
* @param obj 目标对象
* @argument 要挑选的属性名
*/
export function pickObjectKey<T = AnyObject>(obj: T, ...props: (keyof T)[]) {
return Object.fromEntries(Object.entries(obj).filter(([k]) => props.includes(k as keyof T)));
}
/**
* 随机HEX颜色
*/
export function randomHEXColor() {
return `#${Math.floor(Math.random() * 0xffffff)
.toString(16)
.padEnd(6, '0')}`;
}
/**
* 去除字符串中的元素标记
* parseFromString('<div>Hello World</div>') // Hello World
*/
export function removeTag(fragment: string) {
return new DOMParser().parseFromString(fragment, 'text/html').body.textContent || '';
}