js 常用工具类的封装

var fun = {

    //#region 数组操作
    // 判断是否为数组
    isArray: function (arr) {
        return Object.prototype.toString.call(arr) === '[object Array]';
    },

    // 数组去重,只考虑数组中元素为数字或者字符串
    newarr: function (arr) {
        var arrs = [];
        for (var i = 0; i < arr.length; i++) {
            if (arrs.indexOf(arr[i]) == -1) {
                arrs.push(arr[i])
            }
        }
        return arrs;
    },

    // 数组去重
    removeRepeatArray: function (arr) {
        return Array.from(new Set(arr))
    },

    // 数组filter(搜索功能)
    filterItems: function (arr, str) {
        return arr.filter(function (el) {
            return el.toLowerCase().indexOf(str.toLowerCase()) > -1;
        })
    },

    // 判断数组是否包含某个元素
    contains: function (arr,val) {
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] == val) {
                return true;
            }
        }
        return false;
    },

    //  返回数组(字符串)一个元素出现的次数
    getEleCount(arr, str) {
        var num = 0;
        for (var i = 0, len = arr.length; i < len; i++) {
            if (str == arr[i]) {
                num++;
            }
        }
        return num;
    },
    //#endregion

    //#region 对象
    // 清空对象为空的数据
    filterParams: function (obj) {
        let _newPar = {};
        for (let key in obj) {
            if ((obj[key] === 0 || obj[key]) && obj[key].toString().replace(/(^\s*)|(\s*$)/g, '') !== '') {
                _newPar[key] = obj[key];
            }
        }
        return _newPar;
    },

    // 判断对象是否含有为空的数据
    filterParams2: function (obj) {
        let _newPar = {};
        for (let key in obj) {
            if ((obj[key] === 0 || obj[key]) && obj[key].toString().replace(/(^\s*)|(\s*$)/g, '') !== '') {
                _newPar[key] = obj[key];
            }
        }
        return _newPar;
    },

    //#endregion

    //#region 字符串操作
    // 去除字符串空格(type 1-所有空格  2-前后空格  3-前空格 4-后空格)
    trim: function (str) {
        switch (type) {
            case 1: return str.replace(/\s+/g, "");
            case 2: return str.replace(/(^\s*)|(\s*$)/g, "");
            case 3: return str.replace(/(^\s*)/g, "");
            case 4: return str.replace(/(\s*$)/g, "");
            default: return str;
        }
    },

    // 字母大小写切换(type: 1:首字母大写   2:首页母小写 3:大小写转换 4:全部大写 5:全部小写)
    changeCase: function (str, type) {
        function ToggleCase(str) {
            var itemText = ""
            str.split("").forEach(
                function (item) {
                    if (/^([a-z]+)/.test(item)) {
                        itemText += item.toUpperCase();
                    }
                    else if (/^([A-Z]+)/.test(item)) {
                        itemText += item.toLowerCase();
                    }
                    else {
                        itemText += item;
                    }
                });
            return itemText;
        }

        switch (type) {
            case 1:
                return str.replace(/^(\w)(\w+)/, function (v, v1, v2) {
                    return v1.toUpperCase() + v2.toLowerCase();
                });
            case 2:
                return str.replace(/^(\w)(\w+)/, function (v, v1, v2) {
                    return v1.toLowerCase() + v2.toUpperCase();
                });
            case 3:
                return ToggleCase(str);
            case 4:
                return str.toUpperCase();
            case 5:
                return str.toLowerCase();
            default:
                return str;
        }
    },

    // 字符串循环复制
    repeatStr: function (str, count) {
        var text = '';
        for (var i = 0; i < count; i++) {
            text += str;
        }
        return text;
    },

    //字符串替换(str:字符串,AFindText:要替换的字符,ARepText:替换成什么)
    replaceAll: function (str, AFindText, ARepText) {
        raRegExp = new RegExp(AFindText, "g");
        return str.replace(raRegExp, ARepText);
    },

    // 随机码
    randomNumber: function (count) {
        return Math.random().toString(count).substring(2);
    },
    //#endregion

    //#region 时间
    // 倒计时 -》"剩余时间6天 2小时 28 分钟20 秒"
    getEndTime: function (endTime) {
        var startDate = new Date();  //开始时间,当前时间
        var endDate = new Date(endTime); //结束时间,需传入时间参数
        var t = endDate.getTime() - startDate.getTime();  //时间差的毫秒数
        var d = 0, h = 0, m = 0, s = 0;
        if (t >= 0) {
            d = Math.floor(t / 1000 / 3600 / 24);
            h = Math.floor(t / 1000 / 60 / 60 % 24);
            m = Math.floor(t / 1000 / 60 % 60);
            s = Math.floor(t / 1000 % 60);
        }
        return "剩余时间" + d + "天 " + h + "小时 " + m + " 分钟" + s + " 秒";
    },

    // 时间戳转换时间格式(YY-MM-DD hh:mm:ss) 2021-10-10 10:23:56
    timestampToTim: function (timestamp) {
        var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
        Y = date.getFullYear() + '-';
        M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
        D = date.getDate() + ' ';
        h = date.getHours() + ':';
        m = date.getMinutes() + ':';
        s = date.getSeconds();
        return Y + M + D + h + m + s;
    },

    //  获取当月的天数
    getDateCount:function () {
        const date = new Date();
        const year = date.getFullYear();
        const month = date.getMonth() + 1;
        const days = new Date(year, month, 0);
        return days.getDate()
    },
    
    // 获取本月所有日期
    getDate:function() {
        let now = new Date();
        let current_month_num = mGetDate();
        let current_month = [];
        for (let i = 1; i <= current_month_num; i++) {
            let day = now.setDate(i);
            let everyDay = formatMonth(day);
            current_month.push(everyDay);
        }
        return current_month;
    },




    //#endregion

    //#region 格式验证
    /**格式验证
     * identity:身份证
     * email=邮箱
     * phone:手机号
     * tel:电话号,
     * number:数字
     * english:字母
     * chinese:中文
     * lower:小写字母
     * upper:大写
     * IPv4地址:ip地址
     */
    checkType: function (str, type) {
        switch (type) {
            case 'identity':
                return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);
            case 'email':
                return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
            case 'phone':
                return /^1[3|4|5|7|8][0-9]{9}$/.test(str);
            case 'tel':
                return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
            case 'number':
                return /^[0-9]$/.test(str);
            case 'english':
                return /^[a-zA-Z]+$/.test(str);
            case 'chinese':
                return /^[\u4E00-\u9FA5]+$/.test(str);
            case 'lower':
                return /^[a-z]+$/.test(str);
            case 'upper':
                return /^[A-Z]+$/.test(str);
            case 'ip':
                return /((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/.test(str);
            default:
                return true;
        }
    },

    // 密码强度(1、2、3)
    checkPwd: function (str) {
        var nowLv = 0;
        if (str.length < 6) {
            return nowLv
        }
        ;
        if (/[0-9]/.test(str)) {
            nowLv++
        }
        ;
        if (/[a-z]/.test(str)) {
            nowLv++
        }
        ;
        if (/[A-Z]/.test(str)) {
            nowLv++
        }
        ;
        if (/[\.|-|_]/.test(str)) {
            nowLv++
        }
        ;
        return nowLv;
    },

    //#endregion

    //#region 适配 rem
    getFontSize: function () {
        var doc = document, win = window;
        var docEl = doc.documentElement,
            resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
            recalc = function () {
                var clientWidth = docEl.clientWidth;
                if (!clientWidth) return;
                //如果屏幕大于750(750是根据我效果图设置的,具体数值参考效果图),就设置clientWidth=750,防止font-size会超过100px
                if (clientWidth > 750) { clientWidth = 750 }
                //设置根元素font-size大小
                docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
            };
        //屏幕大小改变,或者横竖屏切换时,触发函数
        win.addEventListener(resizeEvt, recalc, false);
        //文档加载完成时,触发函数
        doc.addEventListener('DOMContentLoaded', recalc, false);
    },
    //使用方式很简单,比如效果图上,有张图片。宽高都是100px;
    //样式写法就是
    // img{
    //         width:1rem;
    // height: 1rem;
    // }
    //这样的设置,比如在屏幕宽度大于等于750px设备上,1rem=100px;图片显示就是宽高都是100px
    //比如在iphone6(屏幕宽度:375)上,375/750*100=50px;就是1rem=50px;图片显示就是宽高都是50px;


    //#endregion

    //#region 文件操作类
    // 获取文件名
    getFileName: function (fileName) {
        var pos = fileName.lastIndexOf(".");
        if (pos == -1) {
            return fileName;
        } else {
            return fileName.substring(pos, fileName.length);
        }
    },

    // 获取文件后缀名
    getExt: function (fileName) {
        if (fileName.lastIndexOf(".") == -1)
            return fileName;
        var pos = fileName.lastIndexOf(".") + 1;
        return fileName.substring(pos, fileName.length).toLowerCase();
    },

    // 验证是否为图片
    tmCheckImage: function (fileName) {
        return /(gif|jpg|jpeg|png|GIF|JPG|PNG)$/ig.test(fileName);
    },

    // 验证是否为视频
    tmCheckVideo: function (fileName) {
        return /(mp4|mp3|flv|wav)$/ig.test(fileName);
    },

    /*验证是否为文档*/
    tmCheckDocument: function (fileName) {
        
        return /(doc|docx|xls|xlsx|pdf|txt|ppt|pptx|rar|zip|html|jsp|sql|htm|shtml|xml)$/ig.test(fileName);
    },


    //#endregion

    //#region 网络请求
    // 将 url 中的参数解析为一个对象
    getUrlPrmt: function (url) {
        var str = url.split('?')[1];
        var result = {};
        var temp = str.split('&');
        for (var i = 0; i < temp.length; i++) {
            var temp2 = temp[i].split('=');
            result[temp2[0]] = temp2[1];
        }
        return result;
    },

    // 将 对象 设置成url格式 {'a':1,'b':2}  -》  a=1&b=2
    setUrlPrmt: function (obj) {
        let _rs = [];
        for (let p in obj) {
            if (obj[p] != null && obj[p] != '') {
                _rs.push(p + '=' + obj[p])
            }
        }
        return _rs.join('&');
    }

    //#endregion



}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值