好用的js函数
util.js
/**
* 将金额转换为以千为单位分割的字符串格式
* @param {number} amount - 要格式化的金额
* @returns {string} 格式化结果字符串
*/
const formatMoney = (amount) => {
// 将金额转换为字符串,并使用 split 方法将整数部分和小数部分分别存储在数组中
const [intPart, decimalPart] = amount.toString().split('.');
// 使用正则表达式在整数部分的数值间添加分割符号,以实现每 `unit` 个数字分割一次的效果
const formattedIntPart = intPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
if (decimalPart) {
// 如果有小数部分,则将小数部分保留两位,并在最终结果中添加小数点
const formattedDecimalPart = decimalPart.padEnd(2, '0').slice(0, 2);
return `${formattedIntPart}.${formattedDecimalPart}`;
} else {
// 否则直接返回整数部分的分割后的字符串,不添加小数点
return `${formattedIntPart}`;
}
}
/**
* 将时间戳转换为中国格式的时间字符串
* @param {number} timestamp - 要转换的时间戳,单位为毫秒
* @param {string} format - 日期格式字符串,需要包含以下占位符:yyyy、MM、dd、HH、mm、ss
* @returns {string} 格式化后的日期字符串
*/
const formatChinaTime = (timestamp, format = 'yyyy-MM-dd HH:mm') => {
if (timestamp.length === 10) {
timestamp = timestamp * 1000
}
const date = new Date(timestamp); // 创建一个 Date 对象,传入时间戳
const year = date.getFullYear(); // 获取年份
const month = date.getMonth() + 1; // 获取月份,需要加 1
const day = date.getDate(); // 获取日期
const hour = date.getHours(); // 获取小时
const minute = date.getMinutes(); // 获取分钟
const second = date.getSeconds(); // 获取秒数
// 定义一个函数,用于在数字前面补 0
const padZero = (num) => (num < 10 ? `0${num}` : num);
// 将格式字符串中的占位符替换为对应的时间值,并在前面补 0
const formattedDate = format
.replace('yyyy', year.toString())
.replace('MM', padZero(month))
.replace('dd', padZero(day))
.replace('HH', padZero(hour))
.replace('mm', padZero(minute))
.replace('ss', padZero(second));
return formattedDate; // 返回格式化后的时间字符串
};
/**
* @description 删除数组中指定索引值的元素
* @param { array } arr - 所操作的数组
* @param { number } index - 索引值
* @return { Promise } 结果
*/
const removeByIndex = (arr, index) => {
return new Promise((resolve, reject) => {
if (index < 0 || index >= arr.length) {
reject(new Error("删除失败"));
} else {
const result = [...arr.slice(0, index), ...arr.slice(index + 1)];
resolve(result);
}
});
};
/**
* @description 文件大小转换
*/
const formatFileSize = (size) => {
size = Number(size)
if (size < 1024) {
return `${size} B`
} else if (size >= 1024 && size < 1024 * 1024) {
return `${(size / 1024).toFixed(2)} KB`;
} else if (size >= 1024 * 1024 && size < 1024 * 1024 * 1024) {
return `${(size / (1024 * 1024)).toFixed(2)} MB`
} else {
return `${(size / (1024 * 1024 * 1024)).toFixed(2)} GB`
}
}
/**
* @description 判断是否是url链接
*/
const isUrl = (str) => {
const pattern = /^https?:\/\//i; // 正则表达式匹配模式
return pattern.test(str);
}
/**
* @description 对比数组是否相等
* @param {array} array1 数组1
* @param {array} array2 数组2
* @returns {boolean}
*/
const arraysEqual = (array1, array2) => {
// 如果数组长度不同,返回false
if (array1.length !== array2.length) {
return false
}
// 对数组进行排序,以便进行逐个比较
array1.sort()
array2.sort()
// 逐个比较数组的每个元素
for (let i = 0; i < array1.length; i++) {
const obj1 = array1[i]
const obj2 = array2[i]
// 如果对象的键值对个数不同,返回false
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
return false
}
// 逐个比较每个对象的属性值
for (const property in obj1) {
if (obj1[property] !== obj2[property]) {
return false
}
}
}
// 如果所有元素都相同,则返回 true
return true
}
/**
* @description 去除html标签
* @param { string } str html字符串
*/
const removeHtmlTags = (str) => {
const htmlTagPattern = /<[^>]+>/g;
return str.replace(htmlTagPattern, '');
}
const in7Days = (timestamp) => {
timestamp = timestamp.length === 10 ? timestamp * 1000 : timestamp
// 将时间戳转化为日期对象
const date = new Date(timestamp);
// 获取当前日期
const now = new Date();
// 获取当前日期七天前的日期
const lastWeek = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
// 判断日期对象是否在七天内,并返回判断结果
return date >= lastWeek && date <= now;
}
最后我们要将这些函数暴露出来便于调用
export default {
formatMoney,
formatChinaTime,
removeByIndex,
formatFileSize,
isUrl,
arraysEqual,
removeHtmlTags,
in7Days
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。