大屏常用自定义工具

文章介绍了JavaScript中的几个实用函数,包括防抖(debounce)和节流(throttle)、时间格式转换、数组操作(如根据键值对数组进行修改、排序和合并)以及数值格式化和日期处理方法。
import moment from "moment";
let time = null;
//防抖
export function debounce(fn, delay) {
    return function () {
        if (time !== null) {
            clearTimeout(time);
        }
        time = setTimeout(() => {
            fn();
        }, delay);
    };
}
// 节流
export function throttle(fn, delay) {
    var flag = true;
    return function () {
        pagination
        if (flag) {
            setTimeout(() => {
                fn.call(this);
                flag = true;
            }, delay);
        }
        flag = false;
    };
}
/**
 * 时间数字转成格式化时分秒(HH:mm:ss)
 * @param {Number} time 时间数字
 * @param {String} unit 时间单位(时、分、秒、毫秒)
 * @returns 
 */
export function convertMinutesToTimeFormatting(time, unit) {
    let fixedProduct;
    switch (unit) {
        case "时":
            fixedProduct = 1000 * 60 * 60;
            break;
        case "分":
            fixedProduct = 1000 * 60;
            break;
        case "秒":
            fixedProduct = 1000;
            break;
        default: fixedProduct = 1;
    }
    return moment.utc(time * fixedProduct || 0).format("HH:mm:ss")
}
console.log(convertMinutesToTimeFormatting(10, "秒"),"111")

在这里插入图片描述

/**
 * 
 * @param {Array} array 源数组
 * @param {Array} keyArr 源数组对应的键名
 * @param {String} name 对应键的名
 * @param {Number} num 对应键名的值
 */
export function correspondingNameAssignment(array, keyArr, name, num) {
    for (const key in array) {
        let e = array[key];
        if (e[keyArr[0]] == name) {
            e[keyArr[1]] = num;
        }
    }

}
let arr = [
    { title: "一网通办事率", value: "84.45" },
    { title: "网办率", value: "62.45" },
    { title: "按期办结率", value: "12.24" },
    { title: "投诉整改率", value: "12.00" },
]
correspondingNameAssignment(arr, ["title", "value"], "网办率", 100);
console.log(arr, "222");

在这里插入图片描述

/**
 * 数字转换成每三位逗号分隔
 * @param {String,Number} value 需要转换的数字
 * @returns 
 */
export function formatMaxvalue(value) {
    if (value === null || value === undefined) return 0;
    let suffix = "";
    let character = String(value);
    let str = [...character];

    if (character.includes(".")) {
        suffix = character.slice(character.indexOf("."), character.length);
        str = [...character.slice(0, character.indexOf("."))];
    }

    let i = str.length - 1,
        count = 0;
    while (i >= 0) {
        if (count === 3) {
            str.splice(i + 1, 0, ",");
            count = 0;
        }
        i--;
        count++;
    }
    return str.join("") + suffix;
}
console.log(formatMaxvalue(2221.36), "333");

在这里插入图片描述

/**
 * 
 * @param {Array} arraySource 数组的顺序
 * @param {Array} array 被排序的数组
 * @param {String} keySource 数组的顺序的键名
 * @param {String} key 被排序的数组的键名
 * @returns 
 */
export function arrayOrderArray(arraySource, array, keySource, key) {
    let newArray = [];
    newArray = arraySource.map(element => {
        array.forEach(list => {
            if (element[keySource] == list[key]) {
                element = list
            }
        })
        return element
    })
    return newArray;
}
let arraySource = [
    { name: "网办率", },
    { name: "按期办结率", },
    { name: "投诉整改率", },
    { name: "一网通办事率", },
]
let array = [
    { title: "一网通办事率", value: "84.45" },
    { title: "网办率", value: "62.45" },
    { title: "按期办结率", value: "12.24" },
    { title: "投诉整改率", value: "12.00" },
]
console.log(arrayOrderArray(arraySource, array, "name", "title"), "444444");
console.log(arraySource, "5555");

在这里插入图片描述

/**
 * 多个数组对象根据某一字段合并为一个数组
 * @param {Array([Array,Array,...])} multidimensionalArray 多维数组
 * @param {String} key 定义要合并的字段名称
 */
export function mergeArraysByKey(multidimensionalArray, key) {
    // 使用reduce()函数对每个数组中的元素进行处理
    const mergedArrays = multidimensionalArray.reduce((accumulator, current) => {
        // 遍历当前数组中的每个元素
        for (let i = 0; i < current.length; i++) {
            const element = current[i][key];
            // 判断该元素在结果数组中是否已存在
            if (!accumulator.some((item) => item[key] === element)) {
                accumulator.push(current[i]);
            } else {
                accumulator[accumulator.findIndex((item) => item[key] === element)]
                    = { ...accumulator[accumulator.findIndex((item) => item[key] === element)], ...current[i] }

            }
        }
        return accumulator;
    }, []);
    return mergedArrays
}
console.log(mergeArraysByKey(
    [
        [
            { title: "一网通办事率", value: "84.45" },
            { title: "网办率", value: "62.45" },
            { title: "按期办结率", value: "12.24" },
            { title: "投诉整改率", value: "12.00" },
        ],
        [
            { title: "一网通办事率", total: 65 },
            { title: "按期办结率", value: "12.24" },
            { title: "网办率", value: "62.45" },
            { title: "投诉整改率", total: 45 },
        ]
    ], "title"),"66666");

在这里插入图片描述

/**
 * 补0五位数
 * @param {String} str 字符串型数字
 * @returns 
 */
export function covering(str) {
    let i = str.length;
    for (let index = 0; index < 5 - i; index++) {
        str = "0" + str
    }
    return str
}
console.log(covering("56"),"77777777");

在这里插入图片描述

/**
 * 
 * @param {Date} time HH:mm:ss
 * @param {String} type 格式 时 分 秒
 * @returns 
 */
export function splitDataTime(time, type = "秒") {
    if (type == "时") {
        return time.slice(0, 2)
    } else if (type == "分") {
        return time.slice(0, 5)
    } else if (type == "秒") {
        return time
    }
}
console.log(splitDataTime("23:36:59", "分"),"88888888");

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值