js常用函数

/**
* Created by on 2017/7/24.
*/

    //****************************************************************************************************************************//
    //****************************************************************************************************************************//
    //*******************************************************字符串相关操作**********************************************************//
    //***************************************************************************************************************************//
    //***************************************************************************************************************************//



    /**
     * 去除空格
     * @param str
     * @param type 1-所有空格  2-前后空格  3-前空格 4-后空格
     * @returns {*}
     */
        function trim(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;
            }
        }
    /**
     * 字母大小写切换
     * @param str
     * @param type 1:首字母大写 2:首页母小写 3:大小写转换 4:全部大写 5:全部小写
     * @returns {*}
     * @useage changeCase('asdasd',1);
     */
        function changeCase(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;
            }
        }
    /**
     * 字符串循环复制
     * @param str
     * @param count
     * @returns {string}
     * @useage repeatStr(str->字符串, count->次数)
     */
        function repeatStr(str, count) {
            var text = '';
            for (var i = 0; i < count; i++) {
                text += str;
            }
            return text;
        }
    /**
     * 字符串替换(字符串,要替换的字符,替换成什么)
     * @param str
     * @param AFindText
     * @param ARepText
     * @returns {XML|void|string}
     */
        function replaceAll(str,AFindText,ARepText){
            raRegExp = new RegExp(AFindText,"g");
            return str.replace(raRegExp,ARepText);
        }
    /**
     * replaceStr(字符串,字符格式, 替换方式,替换的字符(默认*))
     * @param str
     * @param regArr
     * @param type
     * @param ARepText
     * @returns {XML|void|string}
     */
        function replaceStr(str, regArr, type,ARepText) {
            var regtext = '', Reg = null,replaceText=ARepText||'*';
            //replaceStr('18819322663',[3,5,3],0)
            //188*****663
            //repeatStr是在上面定义过的(字符串循环复制),大家注意哦
            if (regArr.length === 3 && type === 0) {
                regtext = '(\\w{' + regArr[0] + '})\\w{' + regArr[1] + '}(\\w{' + regArr[2] + '})'
                Reg = new RegExp(regtext);
                var replaceCount = repeatStr(replaceText, regArr[1]);
                return str.replace(Reg, '$1' + replaceCount + '$2')
            }
            //replaceStr('asdasdasdaa',[3,5,3],1)
            //***asdas***
            else if (regArr.length === 3 && type === 1) {
                regtext = '\\w{' + regArr[0] + '}(\\w{' + regArr[1] + '})\\w{' + regArr[2] + '}'
                Reg = new RegExp(regtext);
                var replaceCount1 = repeatSte(replaceText, regArr[0]);
                var replaceCount2 = repeatSte(replaceText, regArr[2]);
                return str.replace(Reg, replaceCount1 + '$1' + replaceCount2)
            }
            //replaceStr('1asd88465asdwqe3',[5],0)
            //*****8465asdwqe3
            else if (regArr.length === 1 && type == 0) {
                regtext = '(^\\w{' + regArr[0] +  '})'
                Reg = new RegExp(regtext);
                var replaceCount = repeatSte(replaceText, regArr[0]);
                return str.replace(Reg, replaceCount)
            }
            //replaceStr('1asd88465asdwqe3',[5],1,'+')
            //"1asd88465as+++++"
            else if (regArr.length === 1 && type == 1) {
                regtext = '(\\w{' + regArr[0] +  '}$)'
                Reg = new RegExp(regtext);
                var replaceCount = repeatSte(replaceText, regArr[0]);
                return str.replace(Reg, replaceCount)
            }
        }
    /**
     * 检测字符串   checkType('165226226326','phone')    大家可以根据需要扩展
     * @param str
     * @param type
     * @returns {boolean}
     */
        function checkType (str, type) {
            switch (type) {
                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);
                default :
                    return true;
            }
        }
    /**
     * 检测密码强度 checkPwd('12asdASAD')
     * @param str
     * @returns {number}    3(强度等级为3)
     */
        function checkPwd(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;
        }
    /**
     * 随机码(toString详解)   randomNumber(14)
     * @param count     长度,取值范围0-36
     * @returns {string}
     */
        function randomNumber(count){
            return Math.random().toString(count).substring(2);
        }
    /**
     * 在给定字符串中查找子串出现的次数
     * @param str
     * @param strSplit
     * @returns {number}
     */
    /*
     var strTest='sad44654blog5a1sd67as9dablog4s5d16zxc4sdweasjkblogwqepaskdkblogahseiuadbhjcibloguyeajzxkcabloguyiwezxc967'
     countStr(strTest,'blog')
     返回:6
     */
        function countStr (str,strSplit){
            return str.split(strSplit).length-1
        }
    //****************************************************************************************************************************//
    //****************************************************************************************************************************//
    //*******************************************************数组相关操作**********************************************************//
    //***************************************************************************************************************************//
    //***************************************************************************************************************************//
    /**
     * 打乱数组
     * @param arrOld
     * @param num
     * @returns {Array}
     */
        function upsetOrder(arrOld,num){
            var result=[],_length=num||arrOld.length,arr;
            arr=Object.assign([],arrOld)
            for(var i=0,len=arr.length;i<len;i++){
                result.push(arr.splice(Math.floor(Math.random()*arr.length),1)[0]);
            }
            return result;
        }
    /**
     * 打乱数组
     * @param arr
     * @returns {Array.<T>}
     */
        function upsetArr(arr){
            return arr.sort(function(){ return Math.random() - 0.5});
        }
    /**
     * 数组去重
     * @param arrOld
     * @returns {Array}
     */
        function removeReapt1(arrOld){
            var arr=[];
            for(var i=0,len=arrOld.length;i<len;i++){
                if(arr.indexOf(arrOld[i])==-1){
                    arr.push(arrOld[i]);
                }
            }
            return arr;
        }
    /**
     * 数组去重
     * @param arrOld
     * @returns {Array}
     */
        function removeReapt2(arrOld){
            var arr= [];
            var json = {};
            for(var i = 0,len = arrOld.length; i < len; i++){
                if(!json[arrOld[i]]){
                    arr.push(arrOld[i]);
                    json[arrOld[i]] = 1;
                }
            }
            return arr;
        }
    /**
     * 数组去重
     * @param arr
     * @returns {*}
     */
        function removeReapt3(arrOld){
            return Array.from(new Set(arrOld))
        }
    /**
     * 数组最大值  主要是针对数字类型的数组
     * @param arr
     * @returns {number}
     */
        function maxArr(arr){
            return Math.max.apply(null,arr);
        }
    /**
     * 数组最小值  主要是针对数字类型的数组
     * @param arr
     * @returns {number}
     */
        function minArr(arr){
            return Math.min.apply(null,arr);
        }
    /**
     * 求和 主要是针对数字类型的数组
     * @param arr
     * @returns {number}
     */
        function sumArr(arr){
            var sumText=0;
            for(var i=0,len=arr.length;i<len;i++){
                sumText+=arr[i];
            }
            return sumText
        }
    /**
     * 平均值,小数点可能会有很多位,这里不做处理,处理了使用就不灵活了!   主要是针对数字类型的数组
     * @param arr
     * @returns {number}
     */
        function covArr(arr){
            var sumText=sumArr(arr);
            var covText=sumText/length;
            return covText
        }
    /**
     * 从数组中随机获取元素  randomOne([1,2,3,6,8,5,4,2,6])
     * @param arr
     * @returns {*}
     */
        function randomOne(arr) {
            return arr[Math.floor(Math.random() * arr.length)];
        }
    /**
     * 返回数组(字符串)一个元素出现的次数     getEleCount('asd56+asdasdwqe','a')    3
     * @param obj
     * @param ele
     * @returns {number}
     */
        function getEleCount (obj, ele) {
            var num = 0;
            for (var i = 0, len = obj.length; i < len; i++) {
                if (ele == obj[i]) {
                    num++;
                }
            }
            return num;
        }
    /**
     * 返回数组(字符串)出现最多的几次元素和出现次数
     * @param arr
     * @param rank    长度   默认为数组长度
     * @param ranktype     排序方式,默认降序
     * @returns {Array.<T>}
     */
    /*
     getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2])          默认情况,返回所有元素出现的次数
     getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3)        传参(rank=3),只返回出现次数排序前三的
     getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],null,1)   传参(ranktype=1,rank=null),升序返回所有元素出现次数
     getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3,1)      传参(rank=3,ranktype=1),只返回出现次数排序(升序)前三的
     */
        function getCount(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);
        }
    /**
     * 得到n1-n2下标的数组
     * @param arr
     * @param n1
     * @param n2
     * @returns {Array}
     */
    /*
     getArrayNum([0,1,2,3,4,5,6,7,8,9],5,9)    [5, 6, 7, 8, 9]
     getArrayNum([0,1,2,3,4,5,6,7,8,9],2)     [2, 3, 4, 5, 6, 7, 8, 9]   不传第二个参数,默认返回从n1到数组结束的元素
     */
        function getArrayNum(arr,n1,n2){
            var arr1=[],len=n2||arr.length-1;
            for(var i=n1;i<=len;i++){
                arr1.push(arr[i])
            }
            return arr1;
        }
    /**
     * 筛选数组   删除值为'val'的数组元素
     * @param arr
     * @param val
     * @param type
     */
    /*
     removeArrayForValue(['test','test1','test2','test','aaa'],'test','%')     带有'test'的都删除   ["aaa"]
     removeArrayForValue(['test','test1','test2','test','aaa'],'test')         数组元素的值全等于'test'才被删除   ["test1", "test2", "aaa"]
     */
        function removeArrayForValue(arr,val,type){
            arr.filter(function(item){return type==='%'?item.indexOf(val)!==-1:item!==val})
        }
    //****************************************************************************************************************************//
    //****************************************************************************************************************************//
    //*******************************************************其他操作*************************************************************//
    //***************************************************************************************************************************//
    //***************************************************************************************************************************//


    /**
     * 设置cookie
     * @param name
     * @param value
     * @param iDay
     */
        function setCookie(name,value,iDay){
            var oDate=new Date();
            oDate.setDate(oDate.getDate()+iDay);
            document.cookie=name+'='+value+';expires='+oDate;
        }
    /**
     * 获取cookie
     * @param name
     * @returns {*}
     */
        function getCookie(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
     * @param name
     */
        function removeCookie(name){
            setCookie(name,1,-1);
        }
    /**
     * 清除对象中值为空的属性
     * @param obj
     * @returns {{}}
     */
    /*
     filterParams({a:"",b:null,c:"010",d:123})          Object {c: "010", d: 123}
     */
        // function filterParams(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;
        // }
    /**
     * 现金额大写转换函数
     * @param n
     * @returns {string}
     */
        function upDigit(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;
                s = p+ unit[0][i] + s;
            }
            return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
        }
    /**
     * 获取url参数
     * @param url
     * @returns {{}}
     */
    /*
     getUrlPrmt('segmentfault.com/write?draftId=122000011938')
     Object{draftId: "122000011938"}
     */
        // function getUrlPrmt(url) {
        //     url = url ? url : window.location.href;
        //     let _pa = url.substring(url.indexOf('?') + 1), _arrS = _pa.split('&'), _rs = {};
        //     for (let i = 0, _len = _arrS.length; i < _len; i++) {
        //         let pos = _arrS[i].indexOf('=');
        //         if (pos == -1) {
        //             continue;
        //         }
        //         let name = _arrS[i].substring(0, pos), value = window.decodeURIComponent(_arrS[i].substring(pos + 1));
        //         _rs[name] = value;
        //     }
        //     return _rs;
        // }
    /**
     * 设置url参数
     * @param obj
     * @returns {string}
     */
    /*
     setUrlPrmt({'a':1,'b':2})
     a=1&b=2
     */
        // function setUrlPrmt(obj) {
        //     let _rs = [];
        //     for (let p in obj) {
        //         if (obj[p] != null && obj[p] != '') {
        //             _rs.push(p + '=' + obj[p])
        //         }
        //     }
        //     return _rs.join('&');
        // }
    /**
     * 随机返回一个范围的数字
     * @param n1
     * @param n2
     * @returns {number}
     */
        function randomNumber(n1,n2){
            //randomNumber(5,10)
            //返回5-10的随机整数,包括5,10
            if(arguments.length===2){
                return Math.round(n1+Math.random()*(n2-n1));
            }
            //randomNumber(10)
            //返回0-10的随机整数,包括0,10
            else if(arguments.length===1){
                return Math.round(Math.random()*n1)
            }
            //randomNumber()
            //返回0-255的随机整数,包括0,255
            else{
                return Math.round(Math.random()*255)
            }
        }
    /**
     * 随进产生颜色
     * @returns {*}
     */
        function randomColor(){
            //randomNumber是上面定义的函数
            //写法1
            return 'rgb(' + randomNumber(255) + ',' + randomNumber(255) + ',' + randomNumber(255) + ')';

            //写法2
            return '#'+Math.random().toString(16).substring(2).substr(0,6);

            //写法3
            var color='#';
            for(var i=0;i<6;i++){
                color+='0123456789abcdef'[randomNumber(15)];
            }
            return color;
        }
    /**
     * 到某一个时间的倒计时
     * @param endTime
     * @returns {string}
     */
    /*
     getEndTime('2017/7/22 16:0:0')
     "剩余时间6天 2小时 28 分钟20 秒"
     */
        function getEndTime(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+" 秒";
        }
    /**
     * 适配rem
     */
    /*
     使用方式很简单,比如有张图片。宽高都是100px;样式写法就是
     img{
     width:1rem;
     height:1rem;
     }
     这样的设置,比如在屏幕宽度大于等于750px设备上,1 rem=100px;图片显示就是宽高都是100px;
     比如在iphone6(屏幕宽度:375)上,375/750*100=50px;就是1 rem=50px;图片显示就是宽高都是50px;
     */
        function getFontSize(){
            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);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值