js常用方法

類型判斷

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

數(shù)組 對象 去重方法(一)

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

數(shù)組 對象 去重方法(二)

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

數(shù)組(字符串)一個(gè)元素出現(xiàn)的次數(shù)

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

刪除數(shù)組中一個(gè)元素

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

獲取(對象數(shù)組)某些項(xiàng)

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

數(shù)組扁平化

function steamroller(arr) {
    var newArr = [],
        _this = this;
    for (var i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
            // 如果是數(shù)組措伐,調(diào)用(遞歸)steamroller 將其扁平化
            // 然后再 push 到 newArr 中
            newArr.push.apply(newArr, _this.steamroller(arr[i]));
        } else {
            // 不是數(shù)組直接 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 :手機(jī)號 tel :電話號 number :數(shù)值 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;
    }
}

檢測密碼強(qiáng)度

0:密碼小于6位 1:密碼為純數(shù)字 2:密碼為數(shù)字加小寫或者大寫字母 3:密碼為數(shù)字特纤,大小寫字母 4:密碼為數(shù)字,大小寫字母侥加,.-_等
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;
}

查找字符串,出現(xiàn)在原字符串里的次數(shù)

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

實(shí)現(xiàn)字符串長度截取粪躬,并添加省略符

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;
            } //設(shè)置根元素font-size大小
            docEl.style.fontSize = 100 * (clientWidth / psdW) + 'px';
        }; //屏幕大小改變担败,或者橫豎屏切換時(shí),觸發(fā)函數(shù)
    win.addEventListener(resizeEvt, recalc, false); //文檔加載完成時(shí)镰官,觸發(fā)函數(shù)
    doc.addEventListener('DOMContentLoaded', recalc, false);
}

手機(jī)類型判斷

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

到某一個(gè)時(shí)間的倒計(jì)時(shí)

function getEndTime(endTime) {
    var startDate = new Date(); //開始時(shí)間提前,當(dāng)前時(shí)間
    var endDate = new Date(endTime); //結(jié)束時(shí)間,需傳入時(shí)間參數(shù)
    var t = endDate.getTime() - startDate.getTime(); //時(shí)間差的毫秒數(shù)
    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) + '時(shí)';
        m = Math.floor(t / 1000 / 60 % 60) + '分';
        s = Math.floor(t / 1000 % 60) + '秒';
        return [d, h, m, s];
    } else {
        return [];
    }
}

獲取當(dāng)前時(shí)間

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(),
        //小時(shí)
        "m+": date.getMinutes(),
        //分
        "s+": date.getSeconds(),
        //秒
        "q+": Math.floor((date.getMonth() + 3) / 3),
        //季度
        "S": date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) {
        //RegExp.$1返回上一次正則匹配結(jié)果中的子表達(dá)式結(jié)果泳唠,這里是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;
}

隨機(jī)產(chǎn)生顏色

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

隨機(jī)返回一個(gè)范圍的數(shù)字

function randomNumber(n1, n2) {
    console.log(arguments)
    //randomNumber(5,10)
    //返回5-10的隨機(jī)整數(shù)狈网,包括5,10
    if (arguments.length === 2) {
        return Math.round(n1 + Math.random() * (n2 - n1));
    } //randomNumber(10)
    //返回0-10的隨機(jī)整數(shù)笨腥,包括0拓哺,10
    else if (arguments.length === 1) {
        return Math.round(Math.random() * n1);
    } //randomNumber()
    //返回0-255的隨機(jī)整數(shù),包括0脖母,255
    else {
        return Math.round(Math.random() * 255);
    }
}

設(shè)置url參數(shù)

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參數(shù)

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

函數(shù)節(jié)流

function delayFn(fn, delay, mustDelay) {
    var timer = null;
    var t_start;
    return function () {
      var context = this,
        args = arguments,
        t_cur = +new Date(); //先清理上一次的調(diào)用觸發(fā)(上一次調(diào)用觸發(fā)事件不執(zhí)行)
        clearTimeout(timer); //如果不存觸發(fā)時(shí)間士鸥,那么當(dāng)前的時(shí)間就是觸發(fā)時(shí)間
        if (!t_start) {
            t_start = t_cur;
        } //如果當(dāng)前時(shí)間-觸發(fā)時(shí)間大于最大的間隔時(shí)間(mustDelay),觸發(fā)一次函數(shù)運(yùn)行函數(shù)
        if (t_cur - t_start >= mustDelay) {
            fn.apply(context, args);
            t_start = t_cur;
        } //否則延遲執(zhí)行
        else {
            timer = setTimeout(function () {
            fn.apply(context, args);
            }, delay);
        }
    };
}

兩個(gè)數(shù)組取相同值

        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 只允許輸入數(shù)字

<input type="number"  oninput="if(! /^\d+$/.test(this.value)) value=''">
onkeyup="value=value.replace(/[^\d^\.]+/g,'')"  // 只允許輸入數(shù)字和小數(shù)點(diǎn)

服務(wù)器時(shí)間處理

 function dateFormat(inputstr, showsplit, showweek) {
            //Wed Mar 22 13:38:37 CST 2017
            inputstr = inputstr + ""; //末尾加一個(gè)空格
            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;
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谆级,一起剝皮案震驚了整個(gè)濱河市烤礁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肥照,老刑警劉巖脚仔,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舆绎,居然都是意外死亡鲤脏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門亿蒸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凑兰,“玉大人掌桩,你說我怎么就攤上這事」檬常” “怎么了波岛?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長音半。 經(jīng)常有香客問我则拷,道長,這世上最難降的妖魔是什么曹鸠? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任煌茬,我火速辦了婚禮,結(jié)果婚禮上彻桃,老公的妹妹穿的比我還像新娘坛善。我一直安慰自己,他們只是感情好邻眷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布眠屎。 她就那樣靜靜地躺著,像睡著了一般肆饶。 火紅的嫁衣襯著肌膚如雪改衩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天驯镊,我揣著相機(jī)與錄音葫督,去河邊找鬼。 笑死板惑,一個(gè)胖子當(dāng)著我的面吹牛橄镜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洒放,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛉鹿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了往湿?” 一聲冷哼從身側(cè)響起妖异,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎领追,沒想到半個(gè)月后他膳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绒窑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年棕孙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蟀俊,死狀恐怖钦铺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肢预,我是刑警寧澤矛洞,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站烫映,受9級特大地震影響沼本,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锭沟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一抽兆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧族淮,春花似錦辫红、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至较幌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間白翻,已是汗流浹背乍炉。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滤馍,地道東北人岛琼。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像巢株,于是被迫代替她去往敵國和親槐瑞。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354