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
}
文章目录