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, ' '); }}
Cookie
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 '刚刚'}
阅读全文
0 0
- JS类库
- js类库
- js 类库
- Voix.js语音控制JS类库
- JS类库 <转>
- 有用的js类库
- javascript类库 js动画
- js
- js
- JS
- JS
- JS
- js
- js
- js
- js
- js
- JS
- mybatis
- 前缀表达式
- 【Scikit-Learn 中文文档】随机投影
- thinkphp将excel 数据导入数据库表phpexce
- uglifyjs压缩JS
- js 类库
- Android设计模式之—单例模式
- 661. Image Smoother
- Android权限大全
- R语言rvest包简介
- 算法训练 接水问题
- IJKPlayer问题集锦之不定时更新
- Reverse string
- C++里枚举在循环里的问题