代码库

JavaScript常用实例的实现与封装

Posted by AXiang on January 2, 2018

前言

开发的时候,有很多常见的实例操作,一直重复写的话,就是代码沉余。所以把一些常见的操作封装成函数,方便调用。一直待续……

字符串操作

2-1 去除字符串空格
2-2 字母大小写切换
2-3 字符串循环复制
2-4 字符替换
2-5 正哲检测字符串
2-6 检测密码强度
2-7 查找字符串中某字符出现的次数

var aldR = {
    // 2-1 去除字符串空格
    //type 1-所有空格  2-前后空格  3-前空格 4-后空格
    //aldR.trim('  DDSS5asd',1)
    //result:DDSS5asd
    //该方法可以兼容IE8
    trim: function (str, type) {
        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;
        }
    },

    // 2-2 字母大小写切换
    //type 1-首字母大写  2-首页母小写  3-大小写转换 4-全部大写 5-全部小写
    //aldR.changeCase('ccdde',1)
    //result:Ccdde
    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(/\b\w+\b/g, function (word) {
                    return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
                });
            case 2:
                return str.replace(/\b\w+\b/g, function (word) {
                    return word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase();
                });
            case 3:
                return ToggleCase(str);
            case 4:
                return str.toUpperCase();
            case 5:
                return str.toLowerCase();
            default:
                return str;
        }
    },

    // 2-3 字符串循环复制
    //repeatStr(str->字符串, count->次数)
    //aldR.repeatStr('123',3)
    //"result:123123123"
    repeatStr: function (str, count) {
        var text = '';
        for (var i = 0; i < count; i++) {
            text += str;
        }
        return text;
    },

    // 2-4 字符替换
    //replaceStr(字符串,字符格式, 替换方式,替换的字符(默认*))
    //字符格式自己理解:D 不好字述
    //aldR.replaceStr('18819322663',[3,5,3],0)
    //result:188*****663
    //aldR.replaceStr('asdasdasdaa',[3,5,3],1)
    //result:***asdas***
    //aldR.replaceStr('1asd88465asdwqe3',[5],0)
    //result:*****8465asdwqe3
    //aldR.replaceStr('1asd88465asdwqe3',[5],1,'+')
    //result:"1asd88465as+++++"
    replaceStr: function(str, regArr, type, ARepText) {
        var regtext = '',
            Reg = null,
            replaceText = ARepText || '*';
        //repeatStr是在上面定义过的 2-3字符串循环复制
        if (regArr.length === 3 && type === 0) {
            regtext = '(\\w{' + regArr[0] + '})\\w{' + regArr[1] + '}(\\w{' + regArr[2] + '})'
            Reg = new RegExp(regtext);
            var replaceCount = this.repeatStr(replaceText, regArr[1]);
            return str.replace(Reg, '$1' + replaceCount + '$2')
        }
        else if (regArr.length === 3 && type === 1) {
            regtext = '\\w{' + regArr[0] + '}(\\w{' + regArr[1] + '})\\w{' + regArr[2] + '}'
            Reg = new RegExp(regtext);
            var replaceCount1 = this.repeatStr(replaceText, regArr[0]);
            var replaceCount2 = this.repeatStr(replaceText, regArr[2]);
            return str.replace(Reg, replaceCount1 + '$1' + replaceCount2)
        }
        else if (regArr.length === 1 && type === 0) {
            regtext = '(^\\w{' + regArr[0] + '})'
            Reg = new RegExp(regtext);
            var replaceCount = this.repeatStr(replaceText, regArr[0]);
            return str.replace(Reg, replaceCount)
        }
        else if (regArr.length === 1 && type === 1) {
            regtext = '(\\w{' + regArr[0] + '}$)'
            Reg = new RegExp(regtext);
            var replaceCount = this.repeatStr(replaceText, regArr[0]);
            return str.replace(Reg, replaceCount)
        }
    },

    //2-5 正哲检测字符串
    //aldR.checkType('165226226326','phone')
    //result:false
    //大家可以根据需要扩展
    checkType: function (str, type) {
    switch (type) {
        //邮箱
        case 'email':
            return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
        //手机
        case 'phone':
            return /^1[3|4|5|7|8|9][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 'text':
            return /^\w+$/.test(str);
        //中文
        case 'chinese':
            return /^[\u4E00-\u9FA5]+$/.test(str);
        //小写英文
        case 'lower':
            return /^[a-z]+$/.test(str);
        //大写英文
        case 'upper':
            return /^[A-Z]+$/.test(str);
        //QQ号码
        case 'QQ':
            return /^[1-9][0-9]{4,9}$/gim.test(str);
        //邮政编码
        case 'postcode':
            return /^[1-9]\d{5}$/g.test(str);;
        //身份证
        case 'idcard':
            return /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/.test(str);
        default:
            return true;
        }
    },

    //2-6 检测密码强度
    //小于6位为0.只有数字为1,数字+小写为2,数字+大小写为3,数字+大小写+标点为4
    //aldR.checkPwd('12asdASAD')
    //result:3(强度等级为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;
    },   

    // 2-7 查找字符串中某字符出现的次数
    //var strTest='sad44654blog5a1sd67as9dablog4s5d16zxc4sdweasjkblogwqepaskdkblogahseiuadbhjcibloguyeajzxkcabloguyiwezxc967'
    //aldR.countStr(strTest,'blog')
    //result:6
    countStr: function (str, strSplit) {
        return str.split(strSplit).length - 1
    }
}

数组操作

3-1 数组去重
3-2 数组最大值最小值
3-3 数组求和,平均值
3-4 返回数组(字符串)一个元素出现的次数
3-5 返回数组(字符串)出现最多的几次元素和出现次数

var aldR = {
    
    // 3-1 数组去重
    //aldR.removeRepeatArray([1,1,2,3,4,5,6]))
    //return:[1,2,3,4,5,6]
    removeRepeatArray: function (arr) {
        return arr.filter(function (item, index, self) {
        return self.indexOf(item) === index;
        });
    },

    // 3-2 数组最大值
    //aldR.maxArr([1,1,2,3,4,5,6]))
    //return:6
    maxArr: function (arr) {
        return Math.max.apply(null, arr);
    },
    // 3-2 数组最小值
    //aldR.minArr([1,1,2,3,4,5,6]))
    //return:1
    minArr: function (arr) {
        return Math.min.apply(null, arr);
    },

    // 3-3 求和
    //主要是针对数字类型的数组
    //aldR.sumArr([1,1,2,3,4,5,6]))
    //return:22
    sumArr: function (arr) {
        return arr.reduce(function (pre, cur) {
            return pre + cur
        })
    },
    // 3-3 数组平均值
    //小数点可能会有很多位,这里不做处理
    //aldR.covArr([1,1,2,3,4,5,6]))
    //return:3.1428545612399814
    covArr: function (arr) {
        return this.sumArr(arr) / arr.length;
    },

    // 3-4 返回数组(字符串)一个元素出现的次数
    //aldR.getEleCount('asd56+asdasdwqe','a')
    //result:3
    //aldR.getEleCount([1,2,3,4,5,66,77,22,55,22],22)
    //result:2
    getEleCount: function (obj, ele) {
        var num = 0;
        for (var i = 0, len = obj.length; i < len; i++) {
            if (ele === obj[i]) {
                num++;
            }
        }
        return num;
    },
    
    // 3-5 返回数组(字符串)出现最多的几次元素和出现次数
    //arr, rank->长度,默认为数组长度,ranktype,排序方式,默认降序
    //返回值:el->元素,count->次数
    //aldR.getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2])
    //默认情况,返回所有元素出现的次数
    //result:[{"el":"2","count":6},{"el":"1","count":4},{"el":"3","count":2},{"el":"4","count":1},{"el":"5","count":1},{"el":"6","count":1}]
    //aldR.getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3)
    //传参(rank=3),只返回出现次数排序前三的
    //result:[{"el":"2","count":6},{"el":"1","count":4},{"el":"3","count":2}]
    //aldR.getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],null,1)
    //传参(ranktype=1,rank=null),升序返回所有元素出现次数
    //result:[{"el":"6","count":1},{"el":"5","count":1},{"el":"4","count":1},{"el":"3","count":2},{"el":"1","count":4},{"el":"2","count":6}]
    //aldR.getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3,1)
    //传参(rank=3,ranktype=1),只返回出现次数排序(升序)前三的
    //result:[{"el":"6","count":1},{"el":"5","count":1},{"el":"4","count":1}]
    getCount: function (arr, rank, ranktype) {
        var obj = {},
            k, arr1 = []
        //记录每一元素出现的次数
        for (var i = 0, len = arr.length; i < len; i++) {
            k = arr[i];
            if (obj[k]) {
                obj[k]++;
            } else {
                obj[k] = 1;
            }
        }
        //保存结果{el-'元素',count-出现次数}
        for (var o in obj) {
            arr1.push(['el:'+o, 'count:'+ obj[o]]);
        }
        //排序(降序)
        arr1.sort(function (n1, n2) {
            return n2.count - n1.count
        });
        //如果ranktype为1,则为升序,反转数组
        if (ranktype === 1) {
            arr1 = arr1.reverse();
        }
        var rank1 = rank || arr1.length;
        return arr1.slice(0, rank1);
    }
}

其他操作

4-2 Window.localStorage
4-3 现金额大写转换函数
4-4 日期到期时间计算
4-5 手机类型判断

var aldR = {

    // 4-1 cookie
    //设置cookie
    setCookie: function (name, value, iDay) {
        var oDate = new Date();
        oDate.setDate(oDate.getDate() + iDay);
        document.cookie = name + '=' + value + ';expires=' + oDate;
    },
    //获取cookie
    getCookie: function (name) {
        var arr = document.cookie.split('; ');
        for (var i = 0; i < arr.length; i++) {
            var arr2 = arr[i].split('=');
            if (arr2[0] == name) {
                return arr2[1];
            }
        }
        return '';
    },
    //删除cookie
    removeCookie: function (name) {
        this.setCookie(name, 1, -1);
    },
    
    // 4-2 Window.localStorage
    //设置localStorage   DEMO功能:每日首次提醒
    setLocalStorage:function(value){
        var date=new Date();
        window.localStorage.setItem(date.toLocaleDateString(), value);
    },

    //获取localStorage   
    getLocalStorage:function(value){
        var date=new Date();
       return window.localStorage.getItem(date.toLocaleDateString()!= value);
    },

    //删除localStorage
    removeLocalStorage:function(){
        var date=new Date();
        localStorage.removeItem(date.toLocaleDateString());
    },

    // 4-3 现金额大写转换函数
    //ecDo.upDigit(168752632)
    //result:"人民币壹亿陆仟捌佰柒拾伍万贰仟陆佰叁拾贰元整"
    //ecDo.upDigit(1682)
    //result:"人民币壹仟陆佰捌拾贰元整"
    //ecDo.upDigit(-1693)
    //result:"欠人民币壹仟陆佰玖拾叁元整"
    upDigit: function (n) {
        var fraction = ['', '', ''];
        var digit = ['', '', '', '', '', '', '', '', '', ''];
        var unit = [
            ['', '', '亿'],
            ['', '', '', '']
        ];
        var head = n < 0 ? '欠人民币' : '人民币';
        n = Math.abs(n);
        var s = '';
        for (var i = 0; i < fraction.length; i++) {
            s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
        }
        s = s || '';
        n = Math.floor(n);
        for (var i = 0; i < unit[0].length && n > 0; i++) {
            var p = '';
            for (var j = 0; j < unit[1].length && n > 0; j++) {
                p = digit[n % 10] + unit[1][j] + p;
                n = Math.floor(n / 10);
            }
            s = p.replace(/(零.)*零$/, '').replace(/^$/, '') + unit[0][i] + s;
        }
        return head + s.replace(/(零.)*零元/, '').replace(/(零.)+/g, '').replace(/^整$/, '零元整');
    } ,

    
    // 4-4 日期到期时间计算
    //ecDo.getEndTime('2017/7/22 16:0:0')
    //result:"剩余时间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 + "";
    },
    
    
    // 4-5 手机类型判断
    browserInfo: function (type) {
        switch (type) {
            case 'android':
                return navigator.userAgent.toLowerCase().indexOf('android') !== -1
            case 'iphone':
                return navigator.userAgent.toLowerCase().indexOf('iphone') !== -1
            case 'ipad':
                return navigator.userAgent.toLowerCase().indexOf('ipad') !== -1
            case 'weixin':
                return navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1
            default:
                return navigator.userAgent.toLowerCase()
        }
    }

}

肯定会一直更新的啦~