|
- const Utils = {
- _typeof (obj) {
- return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
- },
- isString (o) { //是否字符串
- return Utils._typeof(obj) === 'string'
- },
- isNumber (o) { //是否数字
- return Utils._typeof(obj) === 'number'
- },
- isBoolean (o) { //是否boolean
- return Utils._typeof(obj) === 'boolean'
- },
- isFunction (o) { //是否函数
- return Utils._typeof(obj) === 'function'
- },
- isNull (o) { //是否为null
- return Utils._typeof(obj) === 'null'
- },
- isUndefined (o) { //是否undefined
- return Utils._typeof(obj) === 'undefined'
- },
- isArray (o) { //是否数组
- return Utils._typeof(obj) === 'array'
- },
- isDate (o) { //是否时间
- return Utils._typeof(obj) === 'date'
- },
- /*是否是纯粹的对象*/
- isPlainObject (obj) {
- return Utils._typeof(obj) === 'object';
- },
- isString (obj) {
- return typeof (obj) === 'string';
- },
- /*是否是空数组*/
- isNonEmptyArray (obj = []) {
- return obj && obj.length > 0 && Array.isArray(obj) && typeof obj !== 'undefined';
- },
- /*是否是对象*/
- isObject (item) {
- return (item && typeof item === 'object' && !Array.isArray(item));
- },
- /*是否是空对象*/
- isEmptyObject (obj) {
- return Object.keys(obj).length === 0 && obj.constructor === Object;
- },
- //对象是否包含某属性
- isIncludeAttr(obj, attr) {
- //判断是否有该键值
- if (obj && obj.hasOwnProperty(attr)) {
- //如果有返回true
- return true;
- }
- return false;
-
- },
- decodeIconFont (text) {
- // 正则匹配 图标和文字混排 eg: 我去上学校,天天不迟到
- const regExp = /&#x[a-z|0-9]{4,5};?/g;
- if (regExp.test(text)) {
- return text.replace(new RegExp(regExp, 'g'), function (iconText) {
- const replace = iconText.replace(/&#x/, '0x').replace(/;$/, '');
- return String.fromCharCode(replace);
- });
- } else {
- return text;
- }
- },
- /*深拷贝*/
- mergeDeep (target) {
- let tempObj = Array.isArray(target)?[]:{};
- for(let key in target){
- tempObj[key] = Utils.isObject(target[key])?Util.mergeDeep(target[key]):target[key];
- }
- return tempObj;
- },
-
- /**
- * 分割数组
- * @param arr 被分割数组
- * @param size 分割数组的长度
- * @returns {Array}
- */
- arrayChunk (arr = [], size = 4) {
- let groups = [];
- if (arr && arr.length > 0) {
- groups = arr.map((e, i) => {
- return i % size === 0 ? arr.slice(i, i + size) : null;
- }).filter(e => {
- return e;
- });
- }
- return groups;
- },
- /*
- * 截断字符串
- * @param str 传入字符串
- * @param len 截断长度
- * @param hasDot 末尾是否...
- * @returns {String}
- */
- truncateString (str, len, hasDot = true) {
- let newLength = 0;
- let newStr = '';
- let singleChar = '';
- const chineseRegex = /[^\x00-\xff]/g;
- const strLength = str.replace(chineseRegex, '*').length;
- for (let i = 0; i < strLength; i++) {
- singleChar = str.charAt(i).toString();
- if (singleChar.match(chineseRegex) !== null) {
- newLength += 2;
- } else {
- newLength++;
- }
- if (newLength > len) {
- break;
- }
- newStr += singleChar;
- }
- if (hasDot && strLength > len) {
- newStr += '...';
- }
- return newStr;
- },
- /*
- * 转换 obj 为 url params参数
- * @param obj 传入对象
- * @param isEncodeURIComponent 是否编码,默认不编码
- * @returns {String}
- * eg. objToParams({name:'大佬',age:18})
- */
- objToParams (obj,isEncodeURIComponent=false) {
- let str = "";
- for (let key in obj) {
- if (str !== "") {
- str += "&";
- }
- str += key + "=" + (isEncodeURIComponent?encodeURIComponent(obj[key]):obj[key]);
- }
- return str;
- },
- /*
- * 转换 url params参数为obj
- * @param str 传入url参数字符串
- * @param isDecodeURI 是否解码,默认不解码
- * @returns {Object}
- * eg. paramsToObj('http://www.cctv.com?name=大佬&age=18')
- */
- paramsToObj (str,isDecodeURI=false) {
- let obj = {};
- str = str.substring(str.indexOf('?')+1);
- try {
- obj = JSON.parse('{"' + (isDecodeURI?decodeURI(str):str).replace(/"/g, '\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}')
- } catch (e) {
- console.log(e);
- }
- return obj;
- },
- /*
- *保留n位小数
- *@param num {Number|String} 原数字 1.33或者'1.33'
- *@returns {String} 返回字符串
- */
- toThousands(num,n) {
- return parseFloat(num).toFixed(n).replace(/(\d{1,3})(?=(\d{3})+(?:\.))/g, "$1,");
- },
- /*
- *生成两位整数之间的随机整数(包括两端的整数 )
- *
- **/
- randomA(min, max) {
- return Math.floor(Math.random() * (max - min + 1)) + min;
- },
- /*
- *生成两位整数之间的随机整数(不包括两端的整数)
- *
- **/
- randomB(min, max) {
- min+=1,max-=1;
- return Math.floor(Math.random() * (max - min + 1)) + min;
- },
- /*时间格式化*/
- formatTime(obj, format) {
- if(format){
- var date;
- if (obj instanceof Date) {
- date = obj;
- } else {
- date = new Date(obj);
- }
- var dayNames = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日',]
- var o = {
- 'M+': date.getMonth() < 9 ? "0" + (date.getMonth() + 1) : (date.getMonth() + 1), // 月份
- 'd+': date.getDate() < 10 ? "0" + date.getDate() : date.getDate(), // 日
- 'h+': date.getHours(), // 小时
- 'm+': date.getMinutes(), // 分
- 's+': date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds(), // 秒
- 'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
- 'S+': date.getMilliseconds(), // 毫秒
- 'D+': dayNames[date.getDay()], //星期
- };
- if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (`${date.getFullYear()}`).substr(4 - RegExp.$1.length));
- for (var k in o) {
- if (new RegExp(`(${k})`).test(format)) {
- format = format.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : ((`00${o[k]}`).substr((`${o[k]}`).length)));
- }
- }
- return format;
- }else{
- let date = new Date(obj)
- let _year = date.getFullYear(),
- _month = (date.getMonth()+1) > 9 ? (date.getMonth()+1) : '0' + (date.getMonth()+1),
- _date = date.getDate(),
- _hour = date.getHours(),
- _minute = date.getMinutes(),
- _second = date.getSeconds()
- return _year + '-' + _month + '-' + _date + ' ' + _hour + ':' + _minute + ':' + _second
- }
- },
- /*去掉首尾空格*/
- trimStr(str) {
- return str.replace(/(^\s*)|(\s*$)/g,"");
- },
- /*正则匹配*/
- 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之间,只能包含字母、数字和下划线
- 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': //金额(小数点2位)
- return /^\d*(?:\.\d{0,2})?$/.test(str);
- case 'URL': //网址
- 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': //数字
- return /^[0-9]$/.test(str);
- case 'positiveInteger': //正整数
- return /^[1-9]\d*$/.test(str);
- case 'price': //价格
- return /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/.test(str);//价格非0则去掉'?'
- 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标记
- return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
- default:
- return true;
- }
- },
- /**
- * @param {s} 秒数
- * @return {String} 字符串
- *
- * @example formatHMS(3610) // -> 1h0m10s
- */
- formatHMS (s) {
- var str = ''
- if (s > 3600) {
- str = Math.floor(s/3600)+'h'+Math.floor(s%3600/60)+'m'+s%60+'s'
- }else if(s > 60) {
- str = Math.floor(s/60)+'m'+s%60+'s'
- }else{
- str = s%60+'s'
- }
- return str
- },
- //根据月份获取起止时间戳
- getTimeFromMonth(year, month){
- return [
- new Date(year, month - 1, 1).getTime()/1000,
- new Date(year, month, 0).getTime()/1000
- ]
- },
- //根据日期获取一天起止时间戳
- getTimeFromDay(year, month,day){
- return [
- new Date(year, month-1 , day).getTime()/1000,
- new Date(year, month-1, (day+1)).getTime()/1000
- ]
- },
- /*数组删除指定元素*/
- remove (arr, ele) {
- var index = arr.indexOf(ele);
- if(index > -1) {
- arr.splice(index, 1);
- }
- return arr;
- },
- // 数组求并集
- union (a,b) {
- return [...new Set([...a, ...b])];
- },
- // 数组求交集
- intersect (a,b) {
- return [...new Set([...a].filter(x => b.includes(x)))];
- },
- //数组求差集
- difference (a,b) {
- return [...new Set([...a].filter(x => !b.includes(x)))];
- },
- //数组内部交换
- internalExchange (n,m,arr) {
- [arr[n],arr[m]] = [arr[m],arr[n]];
- } ,
- //数组去重
- Deduplication (arr) {
- return [...new Set([...arr])]
- },
- /*数组最大值*/
- max (arr) {
- return Math.max.apply(null, arr);
- },
- /*数组最小值*/
- min (arr) {
- return Math.min.apply(null, arr);
- },
- //字符串首字母变大写
- changeIndexToUpperCase(str){
- return str.replace(/\b\w+\b/g, function (word) {
- return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
- });
- },
- //float偏移处理 eg. 1.67*100结果会偏移,使用mul(1.67*100)
- mul(a, b) {
- let c = 0,
- d = a.toString().replace(',',''),
- e = b.toString();
- try {
- c += d.split(".")[1].length;
- } catch (f) {}
- try {
- c += e.split(".")[1].length;
- } catch (f) {}
- return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
- }
- }
复制代码 例子
调用方法
- Utils .mul(a,b);
- Utils .changeIndexToUpperCase(str)
复制代码
|
|