数据工具函数
2024/9/11大约 3 分钟
本文档整理了常用的数据处理工具函数。
格式化字节数
实现代码
/**
* 格式化字节数为易读的字符串
*
* @param bytes 要格式化的字节数
* @param decimals 小数点后的位数,默认为 2
* @returns 格式化后的字符串
*/
function formatBytes(bytes, decimals = 2) {
// 如果字节数为 0,则直接返回 "0 Bytes"
if (bytes === 0) return "0 Bytes";
// 常量 k 用于计算,表示 1024
const k = 1024;
// 确保 decimals 不为负数,如果是,则将其设置为 0
const dm = decimals < 0 ? 0 : decimals;
// 定义了一个字符串数组,用于表示不同的数据大小单位
const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB"];
// 计算单位
const i = Math.floor(Math.log(bytes) / Math.log(k));
// 返回格式化后的字符串,其中使用了 toFixed 方法来保留指定的小数位数
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
}
代码解析
该函数将原始字节数转换为人类可读的格式(如 KB、MB、GB 等):
边界条件处理:当传入的字节数为 0 时,直接返回 "0 Bytes",避免后续计算。
常量定义:
k = 1024
:表示二进制单位转换的基数dm
:确保小数位数不为负数sizes
:定义了从小到大的存储单位数组
单位计算:使用对数运算
Math.floor(Math.log(bytes) / Math.log(k))
确定最合适的单位索引。格式化输出:通过
Math.pow(k, i)
将字节数转换为相应单位的值,使用toFixed(dm)
保留指定的小数位数,最后拼接上对应的单位。
使用方法
// 基本使用
formatBytes(1024); // 输出: "1.00 KB"
formatBytes(1048576); // 输出: "1.00 MB"
// 自定义小数位数
formatBytes(1024 * 1024 * 1.5, 1); // 输出: "1.5 MB"
// 处理不同量级的数据
formatBytes(500); // 输出: "500.00 Bytes"
formatBytes(1024 * 1024 * 1024 * 2.3); // 输出: "2.30 GB"
// 负数处理
formatBytes(-1024); // 输出: "-1.00 KB"
根据单位转换数据
实现代码
/**
* 将字节数据从一种单位转换为另一种单位
* @param value 数值
* @param fromUnit 原始单位,可选值为 'B' | 'KB' | 'MB' | 'GB' | 'TB' | 'PB'
* @param toUnit 目标单位,可选值为 'B' | 'KB' | 'MB' | 'GB' | 'TB' | 'PB'
* @param decimals 保留的小数位数,默认为 0
* @returns 转换后的数值
*/
function convertDataWithUnit(
value,
fromUnit,
toUnit,
decimals = 0
) {
// 基础单位字节数
const BASE = 1024;
// 单位对象
const Unit = {
B: Math.pow(BASE, 0),
KB: Math.pow(BASE, 1),
MB: Math.pow(BASE, 2),
GB: Math.pow(BASE, 3),
TB: Math.pow(BASE, 4),
PB: Math.pow(BASE, 5),
};
// 将数据转换为字节数
const bytes = value * Unit[fromUnit.toUpperCase()];
// 将字节数格式化为指定单位的数据
const result = bytes / Unit[toUnit.toUpperCase()];
// 确保 decimals 不为负数,如果是,则将其设置为 0
const dm = decimals < 0 ? 0 : decimals;
// 返回格式化后的数据
return parseFloat(result.toFixed(dm));
}
代码解析
该函数用于在不同的存储单位之间进行数据转换:
基础定义:
BASE = 1024
作为二进制单位转换的基数。单位对象:使用 JavaScript 对象定义了从字节到拍字节的单位转换系数,每个单位对应的值是
BASE
的相应幂次。转换逻辑:
- 首先将输入值转换为字节:
value * Unit[fromUnit.toUpperCase()]
- 然后将字节转换为目标单位:
bytes / Unit[toUnit.toUpperCase()]
- 首先将输入值转换为字节:
精度处理:使用
toFixed(dm)
和parseFloat()
确保结果保留指定的小数位数。
使用方法
// 基本单位转换
convertDataWithUnit(1, "KB", "B"); // 输出: 1024
convertDataWithUnit(1024, "B", "KB"); // 输出: 1
// 跨多个单位的转换
convertDataWithUnit(1, "GB", "MB"); // 输出: 1024
convertDataWithUnit(512, "MB", "GB"); // 输出: 1
// 自定义小数位数
convertDataWithUnit(2048, "MB", "GB", 2); // 输出: 2.00
convertDataWithUnit(1536, "MB", "GB", 2); // 输出: 1.50
// 大数据量转换
convertDataWithUnit(1.5, "TB", "GB"); // 输出: 1536
convertDataWithUnit(5, "PB", "TB"); // 输出: 5120
更新日志
2025/9/28 09:03
查看所有更新日志
38e56
-于