【转】对测试用例中异常流的思考

L1-008 求整数段和

  返回  

日常项目中常用函数的记录总结(一)

2021/8/21 10:37:17 浏览:

目录

 1、节流函数

2、防抖函数

3、正则表达式验证

4、随机生成验证码

5、时间格式转换——倒计时

6、滚动到指定位置

7、时间格式转化——字符串转date

8、时间格式转化——date转字符串


 1、节流函数

// 节流函数
// fn:需要节流的函数,gapTime:时间
export const throttle = (fn, gapTime) => {
    gapTime = gapTime || 1500;
    let _lastTime = null;
    // 返回新的函数
    return function () {
        let _nowTime = + new Date();
        if (_nowTime - _lastTime > gapTime || !_lastTime) {
            fn.apply(this, arguments);  //将this和参数传给原函数
            _lastTime = _nowTime;
        }
    }
}

2、防抖函数

// 防抖函数
// func:防抖的函数,wait:延时时间,immediate:是否立即执行
export function debounce(func, wait, immediate) {
    let timeout;

    return function () {
        let context = this;
        let args = arguments;

        if (timeout) clearTimeout(timeout);
        if (immediate) { // 立即执行
            var callNow = !timeout;
            timeout = setTimeout(() => {
                timeout = null;
            }, wait)
            if (callNow) func.apply(context, args)
        } else { // 不立即执行
            timeout = setTimeout(function () {
                func.apply(context, args)
            }, wait);
        }
    }
}

3、正则表达式验证

// 正则表达式验证
// type:验证类型,value:验证的内容
export const regExTest = (type, value) => {
    switch (type) {
        // 数字
        case 'number':
            return /^[0-9]*$/.test(value);
            break;
        // 电子邮箱
        case 'email':
            return /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/.test(value);
            break;
        // 手机号码2
        case 'mobile':
            return /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(value);
            break;
        // 手机号码
        case 'phone':
            return /^[1]([3-9])[0-9]{9}$/.test(value);
            break;
        // 用户密码
        case 'password':
            return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,30}$/.test(value);
            break;
        // 网址
        case 'url':
            return /^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%$#_]*)?$/.test(value);
            break;
        // 身份证
        case 'id':
            return /^\d{15}|\d{}18$/.test(value);
            break;
        // 汉字
        case 'china':
            return /^[\u4e00-\u9fa5],{0,}$/.test(value);
            break;
        // 邮编
        case 'postal':
            return /^[1-9]\d{5}$/.test(value);
            break;
        // 默认验证是否空值
        default:
            return Boolean(value !== '');
    }
}

4、随机生成验证码

// 随机生成验证码
// number:验证码长度,默认为3
export const checkCodeofRandom = (number = 3) => {

    // 所需随机抽取的样本数组
    const nums=new Array("q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m","A","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M","0","1","2","3","4","5","6","7","8","9");

    // 初始化 拼接字符串
    let str='';

    //验证码长度控制在3~10之间
    let length = value;
    if (value < 3) {
        length = 3;
    } else if (value > 10) {
        length = 10;
    }

    for(let i = 0; i < length; i++) {
        //每次生成一个0 - 61 之间的 number 作为随机获取验证码的下标
        let p = Math.floor((Math.random() * 1000) % (nums.length));
        //拼接验证码  随机抽取大小写字母和数字
        str += nums[p];
    }
    return str;
}

5、时间格式转换——倒计时

// 时间格式转换
// type:转化类型,changeTime1:时间戳1,changeTime2:时间戳2
export const changeMyTimer = (type, changeTime1, changeTime2) => {
    switch (type) {
        // ‘xx天xx:xx:xx’型
        case 1:
            // 校验值
            let num = 0;
            // 返回输出
            let str = '';
            // 差值
            const timerCha = changeTime2 - changeTime1;
            if (timerCha > 0) {
                // 天
                const dd = parseInt(timerCha / 1000 / 60 / 60 / 24, 10);
                // 时
                const hh =parseInt(timerCha / 1000 / 60 / 60 % 24, 10);
                // 分
                const ii = parseInt(timerCha / 1000 / 60 % 60, 10);
                // 秒
                const ss = parseInt(timerCha / 1000 % 60, 10);

                // 格式转化
                if (dd > 0) {
                    num ++;
                    str += dd + '天 ';
                } else {
                    str += '';
                }
                if (hh > 0) {
                    num ++;
                    str += String(hh).padStart(2, 0) + ':';
                } else {
                    if (str) {
                        str += '00:';
                    } else {
                        str += '';
                    }
                }
                if (ii > 0) {
                    num ++;
                    str += String(ii).padStart(2, 0) + ':';
                } else {
                    str += '00:';
                }
                if (ss > 0) {
                    num ++;
                    str += String(ss).padStart(2, 0);
                } else {
                    str += '00';
                }
                if (num > 0) {
                    return str;
                } else {
                    return '';
                }
            } else {
                return '';
            }
            break;
        // ‘xx天xx时xx分xx秒’型
        case 2:
            // 校验值
            let number = 0;
            // 返回输出
            let strs = '';
            // 差值
            const timeCha = changeTime2 - changeTime1;
            if (timerCha > 0) {
                // 天
                const d = parseInt(timeCha / 1000 / 60 / 60 / 24, 10);
                // 时
                const h =parseInt(timeCha / 1000 / 60 / 60 % 24, 10);
                // 分
                const i = parseInt(timeCha / 1000 / 60 % 60, 10);
                // 秒
                const s = parseInt(timeCha / 1000 % 60, 10);
                
                // 格式转化
                if (d > 0) {
                    number ++;
                    strs += d + '天 ';
                } else {
                    strs += '0天 ';
                }
                if (h > 0) {
                    number ++;
                    strs += String(h).padStart(2, 0) + '时 ';
                } else {
                    strs += '00时 ';
                }
                if (i > 0) {
                    number ++;
                    strs += String(i).padStart(2, 0) + '分 ';
                } else {
                    strs += '00分 ';
                }
                if (s > 0) {
                    number ++;
                    strs += String(s).padStart(2, 0) + '秒';
                } else {
                    strs += '00秒';
                }
                if (number > 0) {
                    return strs;
                } else {
                    return '';
                }
            } else {
                return '';
            }
            break;
        // 默认直接输出差值
        default:
            return changeTime2 - changeTime1;
            break;
    }
}

6、滚动到指定位置

// 滚动到指定位置
// number:滚动到的位置,默认为顶部
export const scrollToNumber = (number = 0) => {
    return new Promise((resolve, reject) => {
        let stop = false

        function listenCallBack() {
            stop = true
        }

        const stopEvents = ['click', 'mousewheel', 'touch']
        setTimeout(() => {
            stopEvents.forEach((stopEvent) => {
                window.addEventListener(stopEvent, listenCallBack);
            })
        }, 50)

        // 滚动函数
        function fn() {
            const oTop = document.body.scrollTop || document.documentElement.scrollTop;
            if (oTop !== number && !stop) {
                if (oTop > number) { // 由底部向上滚动
                    document.body.scrollTop = document.documentElement.scrollTop = oTop - oTop * 0.1 < number ? number : oTop - oTop * 0.1;
                    requestAnimationFrame(fn);
                } else { // 由顶部向下滚动
                    document.body.scrollTop = document.documentElement.scrollTop = number - oTop  < 10 ? oTop + 1 : (oTop + (number - oTop) * 0.1 > number ? number : oTop + (number - oTop) * 0.1);
                    requestAnimationFrame(fn);
                }
            } else { // 清除事件
                stopEvents.forEach((stopEvent) => {
                    window.removeEventListener(stopEvent, listenCallBack);
                })
                resolve('scrollEnd')
            }
        }
        requestAnimationFrame(fn);
    })
}

7、时间格式转化——字符串转date

// string转date格式
// string:时间字符串
export const changeString = (string) => {
    return new Date(string.replace(/-/,"/"))
}

8、时间格式转化——date转字符串

// date转string格式
// type:最小转化类型,date:日期
export const changeDate = (type, date) => {
    // 年
    const year = date.getFullYear();
    // 月
    const month = (date.getMonth() + 1).toString().padStart(2, 0);
    // 日
    const day = date.getDate().toString().padStart(2, 0);
    // 时
    const hour = date.getHours().toString().padStart(2, 0);
    // 分
    const minute = date.getMinutes().toString().padStart(2, 0);
    // 秒
    const second = date.getSeconds().toString().padStart(2, 0);
    
    switch (type) {
        case 'year':
            return year + '-' + month + '-' + day;
            break;
        case 'hour':
            return year + '-' + month + '-' + day + ' ' + hour;
            break;
        case 'minute':
            return year + '-' + month + '-' + day + ' ' + hour + ':' + minute;
            break;
        case 'second':
            return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
            break;
        default:
            return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
            break;
    }
}

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号