美文网首页
js常用方法

js常用方法

作者: 北上广_d8bd | 来源:发表于2020-09-03 10:46 被阅读0次

    类型判断

    function istype(o, type) {
        if (type) {
            var _type = type.toLowerCase();
        }
        switch (_type) {
            case 'string':
                return Object.prototype.toString.call(o) === '[object String]';
            case 'number':
                return Object.prototype.toString.call(o) === '[object Number]';
            case 'boolean':
                return Object.prototype.toString.call(o) === '[object Boolean]';
            case 'undefined':
                return Object.prototype.toString.call(o) === '[object Undefined]';
            case 'null':
                return Object.prototype.toString.call(o) === '[object Null]';
            case 'function':
                return Object.prototype.toString.call(o) === '[object Function]';
            case 'array':
                return Object.prototype.toString.call(o) === '[object Array]';
            case 'object':
                return Object.prototype.toString.call(o) === '[object Object]';
            case 'nan':
                return isNaN(o);
            case 'elements':
                return Object.prototype.toString.call(o).indexOf('HTML') !== -1;
            default:
                // return Object.prototype.toString.call(o)
                return false;
        }
    }
    

    数组 对象 去重方法(一)

    function removeRepeatArray(arr, key) {
        var arrResult = [];
        if (this.istype(arr[0], "object") && this.istype(key, "string")) {
            for (var i = 0; i < arr.length; i++) {
                var state = true;
                for (var j = 0; j < arrResult.length; j++) {
                    if (arr[i][key] == arrResult[j][key]) {
                        state = false;
                    }
                }
                if (state) {
                    arrResult.push(arr[i]);
                }
            }
        } else {
            arrResult = arr.filter(function (item, index, self) {
                return self.indexOf(item) === index;
            });
        }
        return arrResult;
    }
    

    数组 对象 去重方法(二)

    function setArrObj(data) {
          let obj = {};
          return data.reduce((cur, next) => {
            obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
            return cur;
          }, [])
        }
    

    数组(字符串)一个元素出现的次数

    function getEleCount(obj, ele) {
        var num = 0;
        for (var i = 0, len = obj.length; i < len; i++) {
            if (ele === obj[i]) {
                num++;
            }
        }
        return num;
    }
    

    删除数组中一个元素

    function removeArrayForValue(arr, val, type) {
        return arr.filter(function (item) {
            return type ? item.indexOf(val) === -1 : item !== val;
        });
    }
    

    获取(对象数组)某些项

    function getOptionArray(arr, keys, val) {
        var newArr = [];
        if (!keys) {
            return arr;
        }
        var _keys = keys.split(',');
        if (val) {
            var _vals = val;
            newArr = arr.filter(function (i) {
                var state = _keys.every(function (j, index) {
                    if (i[j] == _vals[index]) {
                        return true;
                    } else {
                        return false;
                    }
                });
                return state;
            });
            return newArr;
        }
        if (_keys.length === 1) {
            for (var i = 0, len = arr.length; i < len; i++) {
                newArr.push(arr[i][keys]);
            }
            return newArr;
        }
        var newArrOne = {};
        for (var i = 0, len = arr.length; i < len; i++) {
            newArrOne = {};
            for (var j = 0, len1 = _keys.length; j < len1; j++) {
                newArrOne[_keys[j]] = arr[i][_keys[j]];
            }
            newArr.push(newArrOne);
        }
        return newArr;
    }
    

    数组扁平化

    function steamroller(arr) {
        var newArr = [],
            _this = this;
        for (var i = 0; i < arr.length; i++) {
            if (Array.isArray(arr[i])) {
                // 如果是数组,调用(递归)steamroller 将其扁平化
                // 然后再 push 到 newArr 中
                newArr.push.apply(newArr, _this.steamroller(arr[i]));
            } else {
                // 不是数组直接 push 到 newArr 中
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
    

    去空 1-所有空格 2-前后空格 3-前空格 4-后空格

    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;
        }
    }
    

    检测字符串是否符合类型

    email :邮箱 phone :手机号 tel :电话号 number :数值 english :英文 text :文本 chinese :中文 lower :小写 upper :大写
    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 '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);
            default:
                return true;
        }
    }
    
    

    检测密码强度

    0:密码小于6位 1:密码为纯数字 2:密码为数字加小写或者大写字母 3:密码为数字,大小写字母 4:密码为数字,大小写字母,.-_等
    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;
    }
    

    查找字符串,出现在原字符串里的次数

    function countStr(str, strSplit) {
        return str.split(strSplit).length - 1;
    }
    

    找出最长单词

    function longestWord(str, splitType) {
        var _splitType = splitType || /\s+/g,
            _max = 0,
            result = null;
        var strArr = str.split(_splitType);
        strArr.forEach(function (item) {
            if (_max < item.length) {
                _max = item.length;
                result = item;
            }
        });
        return result;
    }
    

    实现字符串长度截取,并添加省略符

    function cutstr(str, len) {
        var temp;
        var icount = 0;
        var patrn = /[^\x00-\xff]/;
        var strre = "";
        for (var i = 0; i < str.length; i++) {
            if (icount < len - 1) {
                temp = str.substr(i, 1);
                if (patrn.exec(temp) == null) {
                    icount = icount + 1;
                } else {
                    icount = icount + 2;
                }
                strre += temp;
            } else {
                break;
            }
        }
        return strre + "...";
    }
    

    对象扁平化处理

    function steamObject(obj) {
        var newObj = {},
            _this = this;
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                var element = obj[key];
                if (_this.istype(element, "object")) {
                    var secObj = this.steamObject(element);
                    for (var keys in secObj) {
                        if (secObj.hasOwnProperty(keys)) {
                            newObj[keys] = secObj[keys];
                        }
                    }
                } else {
                    newObj[key] = element;
                }
            }
        }
        return newObj;
    }
    

    rem适配

    function getFontSize(psdW) {
        var doc = document,
            win = window;
        var docEl = doc.documentElement,
            resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
            recalc = function recalc() {
                var clientWidth = docEl.clientWidth;
                if (!clientWidth) return;
                if (clientWidth > psdW) {
                    clientWidth = psdW;
                } //设置根元素font-size大小
                docEl.style.fontSize = 100 * (clientWidth / psdW) + 'px';
            }; //屏幕大小改变,或者横竖屏切换时,触发函数
        win.addEventListener(resizeEvt, recalc, false); //文档加载完成时,触发函数
        doc.addEventListener('DOMContentLoaded', recalc, false);
    }
    

    手机类型判断

    function browserInfo(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();
        }
    }
    

    到某一个时间的倒计时

    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];
        } else {
            return [];
        }
    }
    

    获取当前时间

    function getFormetTime(fmt, time) {
        //author: meizz
        var date = time ? new Date(time) : new Date();
        var o = {
            "M+": date.getMonth() + 1,
            //月份
            "d+": date.getDate(),
            //日
            "h+": date.getHours(),
            //小时
            "m+": date.getMinutes(),
            //分
            "s+": date.getSeconds(),
            //秒
            "q+": Math.floor((date.getMonth() + 3) / 3),
            //季度
            "S": date.getMilliseconds() //毫秒
        };
        if (/(y+)/.test(fmt)) {
            //RegExp.$1返回上一次正则匹配结果中的子表达式结果,这里是yyyy
            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
    
        for (var k in o) {
            if (new RegExp("(" + k + ")").test(fmt)) {
                fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
            }
        }
        return fmt;
    }
    

    随机产生颜色

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

    随机返回一个范围的数字

    function randomNumber(n1, n2) {
        console.log(arguments)
        //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);
        }
    }
    

    设置url参数

    function setUrlPrmt(obj) {
        var _rs = [];
        for (var p in obj) {
            if (obj[p] != null && obj[p] != '') {
                _rs.push(p + '=' + obj[p]);
            }
        }
        return _rs.join('&');
    }
    
    

    获取url参数

    function getUrlPrmt(url) {
        url = url ? url : "";
        var _pa = url.substring(url.indexOf('?') + 1),
            _arrS = _pa.split('&'),
            _rs = {};
        for (var i = 0, _len = _arrS.length; i < _len; i++) {
            var pos = _arrS[i].indexOf('=');
            if (pos == -1) {
                continue;
            }
            var name = _arrS[i].substring(0, pos); // value = window.decodeURIComponent(_arrS[i].substring(pos + 1));
            _rs[name] = _arrS[i].substring(pos + 1);
        }
        return _rs;
    }
    

    函数节流

    function delayFn(fn, delay, mustDelay) {
        var timer = null;
        var t_start;
        return function () {
          var context = this,
            args = arguments,
            t_cur = +new Date(); //先清理上一次的调用触发(上一次调用触发事件不执行)
            clearTimeout(timer); //如果不存触发时间,那么当前的时间就是触发时间
            if (!t_start) {
                t_start = t_cur;
            } //如果当前时间-触发时间大于最大的间隔时间(mustDelay),触发一次函数运行函数
            if (t_cur - t_start >= mustDelay) {
                fn.apply(context, args);
                t_start = t_cur;
            } //否则延迟执行
            else {
                timer = setTimeout(function () {
                fn.apply(context, args);
                }, delay);
            }
        };
    }
    

    两个数组取相同值

            var arr = [1, 2];
            var arr1 = [1, 2, 3];
            var arr2 = [];
            function ArrayDef(arr, arr1) {
                if (arr.length >= arr1.length) {
                    arr.forEach(item => {
                        if (arr1.every(it => it != item)) {
                            arr2.push(item)
                        }
                    })
                } else {
                    arr1.forEach(item => {
                        if (arr.every(it => it != item)) {
                            arr2.push(item)
                        }
                    })
                }
                return arr2
            }
            console.log(ArrayDef(arr, arr1))
    

    input 只允许输入数字

    <input type="number"  oninput="if(! /^\d+$/.test(this.value)) value=''">
    onkeyup="value=value.replace(/[^\d^\.]+/g,'')"  // 只允许输入数字和小数点
    

    服务器时间处理

     function dateFormat(inputstr, showsplit, showweek) {
                //Wed Mar 22 13:38:37 CST 2017
                inputstr = inputstr + ""; //末尾加一个空格
                var date = "";
                var month = new Array();
                month["Jan"] = '01'; month["Feb"] = '02'; month["Mar"] = '03'; month["Apr"] = '04'; month["May"] = '05'; month["Jun"] = '06';
                month["Jul"] = '07'; month["Aug"] = '08'; month["Sep"] = '09'; month["Oct"] = '10'; month["Nov"] = '11'; month["Dec"] = '12';
                var str = inputstr.split(" ");
                date = str[5];
                date += showsplit + month[str[1]] + showsplit + str[2];
                return date;
            }
    

    相关文章

      网友评论

          本文标题:js常用方法

          本文链接:https://www.haomeiwen.com/subject/rzjnsktx.html