前端常用的實現(xiàn)方法

- - - - - -
1袭灯、郵箱 2刺下、手機號碼 3、電話號碼 4妓蛮、是否url地址 5怠李、是否字符串 6、是否數(shù)字
7蛤克、是否booleam 8捺癞、是否函數(shù) 9、是否null 10构挤、是否undefined 11髓介、是否對象 12、是否數(shù)組
13筋现、是否時間 14唐础、是否正則 15、是否錯誤對象 16矾飞、是否Symbol函數(shù) 17一膨、是否Promise 18、是否Set對象
19洒沦、是否微信瀏覽器 20豹绪、是否移動端 21、是否QQ瀏覽器 22申眼、是否是爬蟲 23瞒津、是否ios 24蝉衣、是否為PC端
25、去除html標(biāo)簽 26巷蚪、獲取url參數(shù) 27病毡、動態(tài)引入js 28、跟據(jù)url地址下載 29屁柏、el是否包含某個class 30啦膜、el添加某個class
31、獲取滾動的坐標(biāo) 32前联、獲取滾動的坐標(biāo) 33功戚、滾動到頂部 34、el是否在視口范圍內(nèi) 35似嗤、洗牌算法隨機 36、劫持粘貼板
37届宠、判斷類型集合 38烁落、嚴(yán)格的身份證校驗 39、隨機數(shù)范圍 40豌注、將阿拉伯?dāng)?shù)字翻譯成中文的大寫數(shù)字 41伤塌、將數(shù)字轉(zhuǎn)換成大寫金額 42、判斷一個元素是否在數(shù)組中
43轧铁、數(shù)組排序 44每聪、去重 45、求兩個集合的并集 46齿风、求兩個集合的交集 47药薯、刪除其中一個元素 48、將類數(shù)組轉(zhuǎn)換為數(shù)組
49救斑、最大值 50童本、最小值 51、求和 52脸候、平均值 53穷娱、去除空格 54、字符轉(zhuǎn)換
55运沦、檢測密碼強度 56泵额、函數(shù)節(jié)流器 57、在字符串中插入新的字符串 58携添、判斷兩個對象是否鍵值相同 59嫁盲、16進制顏色轉(zhuǎn)換 60、追加url參數(shù)

\color{rgb(26, 177, 204)}{1薪寓、郵箱}

export const isEmail = (s) => {
    return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}

\color{rgb(26, 177, 204)}{2亡资、手機號碼}

export const isMobile = (s) => {
    return /^1[0-9]{10}$/.test(s)
}

\color{rgb(26, 177, 204)}{3澜共、電話號碼}

export const isPhone = (s) => {
    return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
}

\color{rgb(26, 177, 204)}{4、是否url地址}

export const isURL = (s) => {
    return /^http[s]?:\/\/.*/.test(s)
}

\color{rgb(26, 177, 204)}{5锥腻、是否字符串}

export const isString = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'String'
}

\color{rgb(26, 177, 204)}{6嗦董、是否數(shù)字}

export const isNumber = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
}

\color{rgb(26, 177, 204)}{7、是否boolean}


export const isBoolean = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
}

\color{rgb(26, 177, 204)}{8瘦黑、是否函數(shù)}

export const isFunction = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
}

\color{rgb(26, 177, 204)}{9京革、是否為null}

export const isNull = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
}

\color{rgb(26, 177, 204)}{10、是否undefined}

export const isUndefined = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
}

\color{rgb(26, 177, 204)}{11幸斥、是否對象}

export const isObj = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
}

\color{rgb(26, 177, 204)}{12匹摇、是否數(shù)組}

export const isArray = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
}

\color{rgb(26, 177, 204)}{13、是否時間}

export const isDate = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
}

\color{rgb(26, 177, 204)}{14甲葬、是否正則}

export const isRegExp = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'RegExp'
}

\color{rgb(26, 177, 204)}{15廊勃、是否錯誤對象}

export const isError = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Error'
}

\color{rgb(26, 177, 204)}{16、是否Symbol函數(shù)}

export const isSymbol = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Symbol'
}

\color{rgb(26, 177, 204)}{17经窖、是否Promise對象}

export const isPromise = (o) => {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Promise'
}

\color{rgb(26, 177, 204)}{18坡垫、是否Set對象}

export const isSet = (o) => {  
    return Object.prototype.toString.call(o).slice(8, -1) === 'Set'
}

export const ua = navigator.userAgent.toLowerCase();

\color{rgb(26, 177, 204)}{19、是否是微信瀏覽器}

export const isWeiXin = () => {
    return ua.match(/microMessenger/i) == 'micromessenger'
}

\color{rgb(26, 177, 204)}{20画侣、是否是移動端}

export const isDeviceMobile = () => { 
    return /android|webos|iphone|ipod|balckberry/i.test(ua)
}

\color{rgb(26, 177, 204)}{21冰悠、是否是QQ瀏覽器}

export const isQQBrowser = () => {
    return !!ua.match(/mqqbrowser|qzone|qqbrowser|qbwebviewtype/i)
}

\color{rgb(26, 177, 204)}{22、是否是爬蟲}

export const isSpider = () => {
    return /adsbot|googlebot|bingbot|msnbot|yandexbot|baidubot|robot|careerbot|seznambot|bot|baiduspider|jikespider|symantecspider|scannerlwebcrawler|crawler|360spider|sosospider|sogou web sprider|sogou orion spider/.test(ua)
}

\color{rgb(26, 177, 204)}{23配乱、是否ios}

export const isIos = () => {
    var u = navigator.userAgent;
    if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {  //安卓手機
        return false
    } else if (u.indexOf('iPhone') > -1) {//蘋果手機
        return true
    } else if (u.indexOf('iPad') > -1) {//iPad
        return false
    } else if (u.indexOf('Windows Phone') > -1) {//winphone手機
        return false
    } else {
        return false
    }
}

\color{rgb(26, 177, 204)}{24溉卓、是否為PC端}

export const isPC = () => {
    var userAgentInfo = navigator.userAgent;
    var Agents = ["Android", "iPhone",
        "SymbianOS", "Windows Phone",
        "iPad", "iPod"];
    var flag = true;
    for (var v = 0; v < Agents.length; v++) {
        if (userAgentInfo.indexOf(Agents[v]) > 0) {
            flag = false;
            break;
        }
    }
    return flag;
}

\color{rgb(26, 177, 204)}{25、去除html標(biāo)簽}

export const removehtmltag = (str) => {
    return str.replace(/<[^>]+>/g, '')
}

\color{rgb(26, 177, 204)}{26搬泥、獲取url參數(shù)}

export const getQueryString = (name) => {
    const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    const search = window.location.search.split('?')[1] || '';
    const r = search.match(reg) || [];
    return r[2];
}

\color{rgb(26, 177, 204)}{27桑寨、動態(tài)引入js}

export const injectScript = (src) => {
    const s = document.createElement('script');
    s.type = 'text/JavaScript';
    s.async = true;
    s.src = src;
    const t = document.getElementsByTagName('script')[0];
    t.parentNode.insertBefore(s, t);
}

\color{rgb(26, 177, 204)}{28、根據(jù)url地址下載}

export const download = (url) => {
    var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
    var isSafari = navigator.userAgent.toLowerCase().indexOf('safari') > -1;
    if (isChrome || isSafari) {
        var link = document.createElement('a');
        link.href = url;
        if (link.download !== undefined) {
            var fileName = url.substring(url.lastIndexOf('/') + 1, url.length);
            link.download = fileName;
        }
        if (document.createEvent) {
            var e = document.createEvent('MouseEvents');
            e.initEvent('click', true, true);
            link.dispatchEvent(e);
            return true;
        }
    }
    if (url.indexOf('?') === -1) {
        url += '?download';
    }
    window.open(url, '_self');
    return true;
}

\color{rgb(26, 177, 204)}{29佑钾、el是否包含某個class}

export const hasClass = (el, className) => {
    let reg = new RegExp('(^|\\s)' + className + '(\\s|$)')
    return reg.test(el.className)
}

\color{rgb(26, 177, 204)}{30西疤、el添加某個class}

export const addClass = (el, className) => {
    if (hasClass(el, className)) {
        return
    }
    let newClass = el.className.split(' ')
    newClass.push(className)
    el.className = newClass.join(' ')
}

\color{rgb(26, 177, 204)}{31、el去除某個class}

export const removeClass = (el, className) => {
    if (!hasClass(el, className)) {
        return
    }
    let reg = new RegExp('(^|\\s)' + className + '(\\s|$)', 'g')
    el.className = el.className.replace(reg, ' ')
}

\color{rgb(26, 177, 204)}{32休溶、獲取滾動的坐標(biāo)}

export const getScrollPosition = (el = window) => ({
    x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft,
    y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop
});

\color{rgb(26, 177, 204)}{33牙勘、滾動到頂部}

export const scrollToTop = () => {
    const c = document.documentElement.scrollTop || document.body.scrollTop;
    if (c > 0) {
        window.requestAnimationFrame(scrollToTop);
        window.scrollTo(0, c - c / 8);
    }
}

\color{rgb(26, 177, 204)}{34沦辙、el是否在視口范圍內(nèi)}

export const elementIsVisibleInViewport = (el, partiallyVisible = false) => {
    const { top, left, bottom, right } = el.getBoundingClientRect();
    const { innerHeight, innerWidth } = window;
    return partiallyVisible
        ? ((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) &&
        ((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth))
        : top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;
}

\color{rgb(26, 177, 204)}{35、洗牌算法隨機}

export const shuffle = (arr) => {
    var result = [],
        random;
    while (arr.length > 0) {
        random = Math.floor(Math.random() * arr.length);
        result.push(arr[random])
        arr.splice(random, 1)
    }
    return result;
}

\color{rgb(26, 177, 204)}{36、劫持粘貼板}

export const copyTextToClipboard = (value) => {
    var textArea = document.createElement("textarea");
    textArea.style.background = 'transparent';
    textArea.value = value;
    document.body.appendChild(textArea);
    textArea.select();
    try {
        var successful = document.execCommand('copy');
    } catch (err) {
        console.log('Oops, unable to copy');
    }
    document.body.removeChild(textArea);
}

\color{rgb(26, 177, 204)}{37瓣蛀、判斷類型集合}

export const checkStr = (str, type) => {
    switch (type) {
        case 'phone':   //手機號碼
            return /^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str);
        case 'tel':     //座機
            return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
        case 'card':    //身份證
            return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);
        case 'pwd':     //密碼以字母開頭辽旋,長度在6~18之間田巴,只能包含字母毁葱、數(shù)字和下劃線
            return /^[a-zA-Z]\w{5,17}$/.test(str)
        case 'postal':  //郵政編碼
            return /[1-9]\d{5}(?!\d)/.test(str);
        case 'QQ':      //QQ號
            return /^[1-9][0-9]{4,9}$/.test(str);
        case 'email':   //郵箱
            return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
        case 'money':   //金額(小數(shù)點2位)
            return /^\d*(?:\.\d{0,2})?$/.test(str);
        case 'URL':     //網(wǎng)址
            return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
        case 'IP':      //IP
            return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
        case 'date':    //日期時間
            return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/.test(str)
        case 'number':  //數(shù)字
            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 'HTML':    //HTML標(biāo)記
            return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
        default:
            return true;
    }
}

\color{rgb(26, 177, 204)}{38、嚴(yán)格的身份證校驗}

export const isCardID = (sId) => {
    if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
        console.log('你輸入的身份證長度或格式錯誤')
        return false
    }
    //身份證城市
    var aCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "內(nèi)蒙古", 21: "遼寧", 22: "吉林", 23: "黑龍江", 31: "上海", 32: "江蘇", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山東", 41: "河南", 42: "湖北", 43: "湖南", 44: "廣東", 45: "廣西", 46: "海南", 50: "重慶", 51: "四川", 52: "貴州", 53: "云南", 54: "西藏", 61: "陜西", 62: "甘肅", 63: "青海", 64: "寧夏", 65: "新疆", 71: "臺灣", 81: "香港", 82: "澳門", 91: "國外" };
    if (!aCity[parseInt(sId.substr(0, 2))]) {
        console.log('你的身份證地區(qū)非法')
        return false
    }

    // 出生日期驗證
    var sBirthday = (sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2))).replace(/-/g, "/"),
        d = new Date(sBirthday)
    if (sBirthday != (d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate())) {
        console.log('身份證上的出生日期非法')
        return false
    }

    // 身份證號碼校驗
    var sum = 0,
        weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
        codes = "10X98765432"
    for (var i = 0; i < sId.length - 1; i++) {
        sum += sId[i] * weights[i];
    }
    var last = codes[sum % 11]; //計算出來的最后一位身份證號碼
    if (sId[sId.length - 1] != last) {
        console.log('你輸入的身份證號非法')
        return false
    }

    return true
}

\color{rgb(26, 177, 204)}{39、隨機數(shù)范圍}

export const random = (min, max) => {
    if (arguments.length === 2) {
        return Math.floor(min + Math.random() * ((max + 1) - min))
    } else {
        return null;
    }
}

\color{rgb(26, 177, 204)}{40瞻讽、將阿拉伯?dāng)?shù)字翻譯成中文的大寫數(shù)字}

export const numberToChinese = (num) => {
    var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十");
    var BB = new Array("", "十", "百", "仟", "萬", "億", "點", "");
    var a = ("" + num).replace(/(^0*)/g, "").split("."),
        k = 0,
        re = "";
    for (var i = a[0].length - 1; i >= 0; i--) {
        switch (k) {
            case 0:
                re = BB[7] + re;
                break;
            case 4:
                if (!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$")
                    .test(a[0]))
                    re = BB[4] + re;
                break;
            case 8:
                re = BB[5] + re;
                BB[7] = BB[5];
                k = 0;
                break;
        }
        if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0)
            re = AA[0] + re;
        if (a[0].charAt(i) != 0)
            re = AA[a[0].charAt(i)] + BB[k % 4] + re;
        k++;
    }

    if (a.length > 1) // 加上小數(shù)部分(如果有小數(shù)部分)
    {
        re += BB[6];
        for (var i = 0; i < a[1].length; i++)
            re += AA[a[1].charAt(i)];
    }
    if (re == '一十')
        re = "十";
    if (re.match(/^一/) && re.length == 3)
        re = re.replace("一", "");
    return re;
}

\color{rgb(26, 177, 204)}{41鸳吸、將數(shù)字轉(zhuǎn)換為大寫金額}

export const changeToChinese = (Num) => {
    //判斷如果傳遞進來的不是字符的話轉(zhuǎn)換為字符
    if (typeof Num == "number") {
        Num = new String(Num);
    };
    Num = Num.replace(/,/g, "") //替換tomoney()中的“,”
    Num = Num.replace(/ /g, "") //替換tomoney()中的空格
    Num = Num.replace(/¥/g, "") //替換掉可能出現(xiàn)的¥字符
    if (isNaN(Num)) { //驗證輸入的字符是否為數(shù)字
        //alert("請檢查小寫金額是否正確");
        return "";
    };
    //字符處理完畢后開始轉(zhuǎn)換,采用前后兩部分分別轉(zhuǎn)換
    var part = String(Num).split(".");
    var newchar = "";
    //小數(shù)點前進行轉(zhuǎn)化
    for (var i = part[0].length - 1; i >= 0; i--) {
        if (part[0].length > 10) {
            return "";
            //若數(shù)量超過拾億單位速勇,提示
        }
        var tmpnewchar = ""
        var perchar = part[0].charAt(i);
        switch (perchar) {
            case "0":
                tmpnewchar = "零" + tmpnewchar;
                break;
            case "1":
                tmpnewchar = "壹" + tmpnewchar;
                break;
            case "2":
                tmpnewchar = "貳" + tmpnewchar;
                break;
            case "3":
                tmpnewchar = "叁" + tmpnewchar;
                break;
            case "4":
                tmpnewchar = "肆" + tmpnewchar;
                break;
            case "5":
                tmpnewchar = "伍" + tmpnewchar;
                break;
            case "6":
                tmpnewchar = "陸" + tmpnewchar;
                break;
            case "7":
                tmpnewchar = "柒" + tmpnewchar;
                break;
            case "8":
                tmpnewchar = "捌" + tmpnewchar;
                break;
            case "9":
                tmpnewchar = "玖" + tmpnewchar;
                break;
        }
        switch (part[0].length - i - 1) {
            case 0:
                tmpnewchar = tmpnewchar + "元";
                break;
            case 1:
                if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
                break;
            case 2:
                if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
                break;
            case 3:
                if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
                break;
            case 4:
                tmpnewchar = tmpnewchar + "萬";
                break;
            case 5:
                if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
                break;
            case 6:
                if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
                break;
            case 7:
                if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
                break;
            case 8:
                tmpnewchar = tmpnewchar + "億";
                break;
            case 9:
                tmpnewchar = tmpnewchar + "拾";
                break;
        }
        var newchar = tmpnewchar + newchar;
    }
    //小數(shù)點之后進行轉(zhuǎn)化
    if (Num.indexOf(".") != -1) {
        if (part[1].length > 2) {
            // alert("小數(shù)點之后只能保留兩位,系統(tǒng)將自動截斷");
            part[1] = part[1].substr(0, 2)
        }
        for (i = 0; i < part[1].length; i++) {
            tmpnewchar = ""
            perchar = part[1].charAt(i)
            switch (perchar) {
                case "0":
                    tmpnewchar = "零" + tmpnewchar;
                    break;
                case "1":
                    tmpnewchar = "壹" + tmpnewchar;
                    break;
                case "2":
                    tmpnewchar = "貳" + tmpnewchar;
                    break;
                case "3":
                    tmpnewchar = "叁" + tmpnewchar;
                    break;
                case "4":
                    tmpnewchar = "肆" + tmpnewchar;
                    break;
                case "5":
                    tmpnewchar = "伍" + tmpnewchar;
                    break;
                case "6":
                    tmpnewchar = "陸" + tmpnewchar;
                    break;
                case "7":
                    tmpnewchar = "柒" + tmpnewchar;
                    break;
                case "8":
                    tmpnewchar = "捌" + tmpnewchar;
                    break;
                case "9":
                    tmpnewchar = "玖" + tmpnewchar;
                    break;
            }
            if (i == 0) tmpnewchar = tmpnewchar + "角";
            if (i == 1) tmpnewchar = tmpnewchar + "分";
            newchar = newchar + tmpnewchar;
        }
    }
    //替換所有無用漢字
    while (newchar.search("零零") != -1)
        newchar = newchar.replace("零零", "零");
    newchar = newchar.replace("零億", "億");
    newchar = newchar.replace("億萬", "億");
    newchar = newchar.replace("零萬", "萬");
    newchar = newchar.replace("零元", "元");
    newchar = newchar.replace("零角", "");
    newchar = newchar.replace("零分", "");
    if (newchar.charAt(newchar.length - 1) == "元") {
        newchar = newchar + "整"
    }
    return newchar;
}

\color{rgb(26, 177, 204)}{42晌砾、判斷一個元素是否在數(shù)組中}

export const contains = (arr, val) => {
    return arr.indexOf(val) != -1 ? true : false;
}

\color{rgb(26, 177, 204)}{43、數(shù)組排序烦磁,{type} 1:從小到大 2:從大到小 3:隨機}

export const sort = (arr, type = 1) => {
    return arr.sort((a, b) => {
        switch (type) {
            case 1:
                return a - b;
            case 2:
                return b - a;
            case 3:
                return Math.random() - 0.5;
            default:
                return arr;
        }
    })
}

\color{rgb(26, 177, 204)}{44养匈、去重}

export const unique = (arr) => {
    if (Array.hasOwnProperty('from')) {
        return Array.from(new Set(arr));
    } else {
        var n = {}, r = [];
        for (var i = 0; i < arr.length; i++) {
            if (!n[arr[i]]) {
                n[arr[i]] = true;
                r.push(arr[i]);
            }
        }
        return r;
    }
}

\color{rgb(26, 177, 204)}{45、求兩個集合的并集}

export const union = (a, b) => {
    var newArr = a.concat(b);
    return this.unique(newArr);
}

\color{rgb(26, 177, 204)}{46都伪、求兩個集合的交集}

export const intersect = (a, b) => {
    var _this = this;
    a = this.unique(a);
    return this.map(a, function (o) {
        return _this.contains(b, o) ? o : null;
    });
}

\color{rgb(26, 177, 204)}{47呕乎、刪除其中一個元素}

export const remove = (arr, ele) => {
    var index = arr.indexOf(ele);
    if (index > -1) {
        arr.splice(index, 1);
    }
    return arr;
}

\color{rgb(26, 177, 204)}{48、將類數(shù)組轉(zhuǎn)換為數(shù)組}

export const formArray = (ary) => {
    var arr = [];
    if (Array.isArray(ary)) {
        arr = ary;
    } else {
        arr = Array.prototype.slice.call(ary);
    };
    return arr;
}

\color{rgb(26, 177, 204)}{49陨晶、最大值}

export const max = (arr) => {
    return Math.max.apply(null, arr);
}

\color{rgb(26, 177, 204)}{50猬仁、最小值}

export const min = (arr) => {
    return Math.min.apply(null, arr);
}

\color{rgb(26, 177, 204)}{51、求和}

export const sum = (arr) => {
    return arr.reduce((pre, cur) => {
        return pre + cur
    })
}

\color{rgb(26, 177, 204)}{52珍逸、平均值}

export const average = (arr) => {
    return this.sum(arr) / arr.length
}

\color{rgb(26, 177, 204)}{53逐虚、去除空格,type: 1-所有空格 2-前后空格 3-前空格 4-后空格}

export const trim = (str, type) => {
    type = type || 1
    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;
    }
}

\color{rgb(26, 177, 204)}{54、字符轉(zhuǎn)換谆膳,type: 1:首字母大寫 2:首字母小寫 3:大小寫轉(zhuǎn)換 4:全部大寫 5:全部小寫}

export const changeCase = (str, type) => {
    type = type || 4
    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 str.split('').map(function (word) {
                if (/[a-z]/.test(word)) {
                    return word.toUpperCase();
                } else {
                    return word.toLowerCase()
                }
            }).join('')
        case 4:
            return str.toUpperCase();
        case 5:
            return str.toLowerCase();
        default:
            return str;
    }
}

\color{rgb(26, 177, 204)}{55、檢測密碼強度}

export const checkPwd = (str) => {
    var Lv = 0;
    if (str.length < 6) {
        return Lv
    }
    if (/[0-9]/.test(str)) {
        Lv++
    }
    if (/[a-z]/.test(str)) {
        Lv++
    }
    if (/[A-Z]/.test(str)) {
        Lv++
    }
    if (/[\.|-|_]/.test(str)) {
        Lv++
    }
    return Lv;
}

\color{rgb(26, 177, 204)}{56撮躁、函數(shù)節(jié)流器}

export const debouncer = (fn, time, interval = 200) => {
    if (time - (window.debounceTimestamp || 0) > interval) {
        fn && fn();
        window.debounceTimestamp = time;
    }
}

\color{rgb(26, 177, 204)}{57漱病、在字符串中插入新字符串}

export const insertStr = (soure, index, newStr) => {
    var str = soure.slice(0, index) + newStr + soure.slice(index);
    return str;
}

\color{rgb(26, 177, 204)}{58、判斷兩個對象是否鍵值相同}

export const isObjectEqual = (a, b) => {
    var aProps = Object.getOwnPropertyNames(a);
    var bProps = Object.getOwnPropertyNames(b);

    if (aProps.length !== bProps.length) {
        return false;
    }

    for (var i = 0; i < aProps.length; i++) {
        var propName = aProps[i];

        if (a[propName] !== b[propName]) {
            return false;
        }
    }
    return true;
}

\color{rgb(26, 177, 204)}{59把曼、16進制顏色轉(zhuǎn)RGBRGBA字符串}

export const colorToRGB = (val, opa) => {

    var pattern = /^(#?)[a-fA-F0-9]{6}$/; //16進制顏色值校驗規(guī)則
    var isOpa = typeof opa == 'number'; //判斷是否有設(shè)置不透明度

    if (!pattern.test(val)) { //如果值不符合規(guī)則返回空字符
        return '';
    }

    var v = val.replace(/#/, ''); //如果有#號先去除#號
    var rgbArr = [];
    var rgbStr = '';

    for (var i = 0; i < 3; i++) {
        var item = v.substring(i * 2, i * 2 + 2);
        var num = parseInt(item, 16);
        rgbArr.push(num);
    }

    rgbStr = rgbArr.join();
    rgbStr = 'rgb' + (isOpa ? 'a' : '') + '(' + rgbStr + (isOpa ? ',' + opa : '') + ')';
    return rgbStr;
}

\color{rgb(26, 177, 204)}{60杨帽、追加url參數(shù)}

export const appendQuery = (url, key, value) => {
    var options = key;
    if (typeof options == 'string') {
        options = {};
        options[key] = value;
    }
    options = $.param(options);
    if (url.includes('?')) {
        url += '&' + options
    } else {
        url += '?' + options
    }
    return url;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嗤军,隨后出現(xiàn)的幾起案子注盈,更是在濱河造成了極大的恐慌,老刑警劉巖叙赚,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件老客,死亡現(xiàn)場離奇詭異,居然都是意外死亡震叮,警方通過查閱死者的電腦和手機胧砰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苇瓣,“玉大人尉间,你說我怎么就攤上這事。” “怎么了哲嘲?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵贪薪,是天一觀的道長。 經(jīng)常有香客問我眠副,道長画切,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任侦啸,我火速辦了婚禮槽唾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘光涂。我一直安慰自己庞萍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布忘闻。 她就那樣靜靜地躺著钝计,像睡著了一般。 火紅的嫁衣襯著肌膚如雪齐佳。 梳的紋絲不亂的頭發(fā)上私恬,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音炼吴,去河邊找鬼本鸣。 笑死,一個胖子當(dāng)著我的面吹牛硅蹦,可吹牛的內(nèi)容都是我干的荣德。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼童芹,長吁一口氣:“原來是場噩夢啊……” “哼涮瞻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起假褪,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤署咽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后生音,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宁否,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年久锥,在試婚紗的時候發(fā)現(xiàn)自己被綠了家淤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡瑟由,死狀恐怖絮重,靈堂內(nèi)的尸體忽然破棺而出冤寿,到底是詐尸還是另有隱情,我是刑警寧澤青伤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布督怜,位于F島的核電站,受9級特大地震影響狠角,放射性物質(zhì)發(fā)生泄漏号杠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一丰歌、第九天 我趴在偏房一處隱蔽的房頂上張望姨蟋。 院中可真熱鬧,春花似錦立帖、人聲如沸眼溶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堂飞。三九已至,卻和暖如春绑咱,著一層夾襖步出監(jiān)牢的瞬間绰筛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工描融, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铝噩,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓窿克,卻偏偏與公主長得像薄榛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子让歼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容