js 类库

来源:互联网 发布:中文模糊匹配软件 编辑:程序博客网 时间:2024/05/18 13:07

NaN

/** *  * @desc   判断是否NaN * @param  {Any} value  * @return {Boolean} */function isNaN(value) {        return value !== value;};

Object

isEmptyObject

/** *  * @desc   判断`obj`是否为空 * @param  {Object} obj * @return {Boolean} */function isEmptyObject(obj) {    if (!obj || typeof obj !== 'object' || Array.isArray(obj))        return false    return !Object.keys(obj).length}

Array

arrayEqual

/** *  * @desc 判断两个数组是否相等 * @param {Array} arr1  * @param {Array} arr2  * @return {Boolean} */function arrayEqual(arr1, arr2) {    if (arr1 === arr2) return true;    if (arr1.length != arr2.length) return false;    for (var i = 0; i < arr1.length; ++i) {        if (arr1[i] !== arr2[i]) return false;    }    return true;}

Array 数组去重的
第一种是比较常规的方法
思路:
1.构建一个新的数组存放结果
2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
3.若结果数组中没有该元素,则存到结果数组中

Array.prototype.unique1 = function(){ var res = [this[0]]; for(var i = 1; i < this.length; i++){  var repeat = false;  for(var j = 0; j < res.length; j++){   if(this[i] == res[j]){    repeat = true;    break;   }  }  if(!repeat){   res.push(this[i]);  } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique1());

第二种方法比上面的方法效率要高
思路:
1.先将原数组进行排序
2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
3.如果不相同,则将该元素存入结果数组中

Array.prototype.unique2 = function(){ this.sort(); //先排序 var res = [this[0]]; for(var i = 1; i < this.length; i++){  if(this[i] !== res[res.length - 1]){   res.push(this[i]);  } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique2());

第二种方法也会有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。

第三种方法(推荐使用)
思路:
1.创建一个新的数组存放结果
2.创建一个空对象
3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

Array.prototype.unique3 = function(){ var res = []; var json = {}; for(var i = 0; i < this.length; i++){  if(!json[this[i]]){   res.push(this[i]);   json[this[i]] = 1;  } } return res;}var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];alert(arr.unique3());

Class

1: hasClass

/** *  * @desc 判断元素是否有某个class * @param {HTMLElement} ele  * @param {String} cls  * @return {Boolean} */function hasClass(ele, cls) {    return (new RegExp('(\\s|^)' + cls + '(\\s|$)')).test(ele.className);}

2: addClass

/** *  * @desc   为元素添加class * @param  {HTMLElement} ele  * @param  {String} cls  */var hasClass = require('./hasClass');function addClass(ele, cls) {    if (!hasClass(ele, cls)) {        ele.className += ' ' + cls;    }}

3 removeClass

/** *  * @desc 为元素移除class * @param {HTMLElement} ele  * @param {String} cls  */var hasClass = require('./hasClass');function removeClass(ele, cls) {    if (hasClass(ele, cls)) {        var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');        ele.className = ele.className.replace(reg, ' ');    }}

1 getCookie

/** *  * @desc 根据name读取cookie * @param  {String} name  * @return {String} */function getCookie(name) {    var arr = document.cookie.replace(/\s/g, "").split(';');    for (var i = 0; i < arr.length; i++) {        var tempArr = arr[i].split('=');        if (tempArr[0] == name) {            return decodeURIComponent(tempArr[1]);        }    }    return '';}

2 removeCookie

var setCookie = require('./setCookie');/** *  * @desc 根据name删除cookie * @param  {String} name  */function removeCookie(name) {    // 设置已过期,系统会立刻删除cookie    setCookie(name, '1', -1);}

3 setCookie

/** *  * @desc  设置Cookie * @param {String} name  * @param {String} value  * @param {Number} days  */function setCookie(name, value, days) {    var date = new Date();    date.setDate(date.getDate() + days);    document.cookie = name + '=' + value + ';expires=' + date;}

Regexp

1 isEmail

/** *  * @desc   判断是否为邮箱地址 * @param  {String}  str * @return {Boolean}  */function isEmail(str) {    return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(str);}

2 isIdCard

/** *  * @desc  判断是否为身份证号 * @param  {String|Number} str  * @return {Boolean} */function isIdCard(str) {    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)}

3 isPhoneNum

/** *  * @desc   判断是否为手机号 * @param  {String|Number} str  * @return {Boolean}  */function isPhoneNum(str) {    return /^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/.test(str)}

4 isUrl

/** *  * @desc   判断是否为URL地址 * @param  {String} str  * @return {Boolean} */function isUrl(str) {    return /[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/i.test(str);}

Time

1 formatPassTime

/** * @desc   格式化${startTime}距现在的已过时间 * @param  {Date} startTime  * @return {String} */function formatPassTime(startTime) {    var currentTime = Date.parse(new Date()),        time = currentTime - startTime,        day = parseInt(time / (1000 * 60 * 60 * 24)),        hour = parseInt(time / (1000 * 60 * 60)),        min = parseInt(time / (1000 * 60)),        month = parseInt(day / 30),        year = parseInt(month / 12);    if (year) return year + "年前"    if (month) return month + "个月前"    if (day) return day + "天前"    if (hour) return hour + "小时前"    if (min) return min + "分钟前"    else return '刚刚'}
原创粉丝点击