188 lines
4.9 KiB
TypeScript
188 lines
4.9 KiB
TypeScript
/**
|
|
* 解析首字母转大写
|
|
* @param str 字符串 ab
|
|
* @returns 结果 Ab
|
|
*/
|
|
export function parseFirstUpper(str: string): string {
|
|
if (!str) return str;
|
|
str = str.replace(/[^_\w]+/g, '');
|
|
return str.substring(0, 1).toUpperCase() + str.substring(1);
|
|
}
|
|
|
|
/**
|
|
* 解析首字母转小写
|
|
* @param str 字符串 Ab
|
|
* @returns 结果 ab
|
|
*/
|
|
export function parseFirstLower(str: string): string {
|
|
if (!str) return str;
|
|
str = str.replace(/[^_\w]+/g, '');
|
|
return str.substring(0, 1).toLowerCase() + str.substring(1);
|
|
}
|
|
|
|
/**
|
|
* 解析下划线转驼峰
|
|
* @param str 字符串 a_b
|
|
* @returns 驼峰风格 aB
|
|
*/
|
|
export function parseStrLineToHump(str: string): string {
|
|
if (!str) return str;
|
|
return str.replace(/_(\w)/g, (_item, letter) => letter.toUpperCase());
|
|
}
|
|
|
|
/**
|
|
* 解析驼峰转下划线
|
|
* @param str 字符串 aB
|
|
* @returns 下划线风格 a_b
|
|
*/
|
|
export function parseStrHumpToLine(str: string): string {
|
|
if (!str) return str;
|
|
return str
|
|
.replace(/([A-Z])/g, '_$1')
|
|
.toLowerCase()
|
|
.replace(/^_/, '');
|
|
}
|
|
|
|
/**
|
|
* 对象的key值驼峰转下划线
|
|
* @param obj 对象属性 字符数组orJSON对象
|
|
* @returns 驼峰转下划线
|
|
*/
|
|
export function parseObjHumpToLine(obj: any): any {
|
|
if (obj === null || obj === undefined) {
|
|
return obj;
|
|
}
|
|
if (Array.isArray(obj)) {
|
|
return obj.map(v => parseObjHumpToLine(v));
|
|
}
|
|
if (typeof obj === 'object') {
|
|
Object.keys(obj).forEach(key => {
|
|
const new_key = parseStrHumpToLine(key);
|
|
if (new_key !== key) {
|
|
obj[new_key] = obj[key];
|
|
delete obj[key];
|
|
}
|
|
obj[new_key] = parseObjHumpToLine(obj[new_key]);
|
|
});
|
|
return obj;
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
/**
|
|
* 对象的key值下划线转驼峰
|
|
* @param obj 对象属性 字符数组orJSON对象
|
|
* @returns 下划线转驼峰
|
|
*/
|
|
export function parseObjLineToHump(obj: any): any {
|
|
if (obj === null || obj === undefined) {
|
|
return obj;
|
|
}
|
|
if (Array.isArray(obj)) {
|
|
return obj.map(v => parseObjLineToHump(v));
|
|
}
|
|
if (typeof obj === 'object') {
|
|
Object.keys(obj).forEach(key => {
|
|
const new_key = parseStrLineToHump(key);
|
|
if (new_key !== key) {
|
|
obj[new_key] = obj[key];
|
|
delete obj[key];
|
|
}
|
|
obj[new_key] = parseObjLineToHump(obj[new_key]);
|
|
});
|
|
return obj;
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
/**
|
|
* 格式化文件大小
|
|
* @param bytes 字节数
|
|
* @param decimalPlaces 保留小数位,默认2位
|
|
* @returns 单位 xB
|
|
*/
|
|
export function parseSizeFromFile(bytes: number, decimalPlaces: number = 2) {
|
|
const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
let i = 0;
|
|
while (bytes >= 1024 && i < units.length - 1) {
|
|
bytes /= 1024;
|
|
i++;
|
|
}
|
|
return `${bytes.toFixed(decimalPlaces || 1)} ${units[i]}`;
|
|
}
|
|
|
|
/**
|
|
* 转换磁盘容量
|
|
* @param size 数值大小
|
|
* @returns
|
|
*/
|
|
export function parseSizeFromMB(size: number): string {
|
|
const num = 1024.0;
|
|
if (size < num) return size + ' MB';
|
|
if (size < Math.pow(num, 2)) return (size / num).toFixed(2) + ' GB';
|
|
return (size / Math.pow(num, 3)).toFixed(2) + ' TB';
|
|
}
|
|
|
|
/**
|
|
* 转换网络速率
|
|
* @param size 数值大小
|
|
* @returns
|
|
*/
|
|
export function parseSizeFromKBs(size: number): string {
|
|
const num = 1024.0;
|
|
if (size < num) return size + ' KB/s';
|
|
if (size < Math.pow(num, 2)) return (size / num).toFixed(2) + ' MB/s';
|
|
if (size < Math.pow(num, 3)) {
|
|
return (size / Math.pow(num, 2)).toFixed(2) + ' GB/s';
|
|
}
|
|
return (size / Math.pow(num, 3)).toFixed(2) + ' TB/s';
|
|
}
|
|
|
|
/**
|
|
* 字节数转换速率
|
|
* @param sizeByte 数值大小
|
|
* @returns [值,单位]
|
|
*/
|
|
export function parseSizeFromKbs(sizeByte: number, timeInterval: number): any {
|
|
sizeByte = Number(sizeByte) || 0;
|
|
timeInterval = Number(timeInterval) || 1;
|
|
// let realBit:any=((sizeByte * 8) / timeInterval);
|
|
// if (realBit >= 0 && realBit < 1000) {
|
|
// return [realBit.toFixed(2),' bits/sec'];
|
|
// }
|
|
|
|
// if (realBit >= 1000 && realBit < 1000*1000) {
|
|
// return [(realBit/1000).toFixed(2) ,' Kbits/sec'];
|
|
// }
|
|
|
|
// if (realBit >= 1000*1000 && realBit < 1000*1000*1000) {
|
|
// return [((realBit/1000)/1000).toFixed(2) ,' Mbits/sec'];
|
|
// }
|
|
|
|
// if (realBit >= 1000*1000*1000) {
|
|
// return [((realBit/1000*1000)/1000).toFixed(2) ,' Gbits/sec'];
|
|
// }
|
|
|
|
// return [((realBit/1000*1000*1000)/1000).toFixed(2) ,' TB/sec'];
|
|
|
|
let realBit: any = (sizeByte * 8) / timeInterval;
|
|
|
|
return [(realBit / 1000 / 1000).toFixed(2), ' Mbits/sec'];
|
|
}
|
|
|
|
/**
|
|
* 字节数转换单位
|
|
* @param bits 字节Bit大小 64009540 = 512.08 MB
|
|
* @returns xx B / KB / MB / GB / TB / PB / EB / ZB / YB
|
|
*/
|
|
export function parseSizeFromBits(bits: number | string): string {
|
|
bits = Number(bits) || 0;
|
|
if (bits <= 0) return '0 B';
|
|
bits = bits * 8;
|
|
const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
const unitIndex = Math.floor(Math.log2(bits) / 10);
|
|
const value = (bits / Math.pow(1000, unitIndex)).toFixed(2);
|
|
const unti = units[unitIndex];
|
|
return `${value} ${unti}`;
|
|
}
|