JS 常用公共方法

整理了下 平时项目自己常用的方法,编写了一个自己的小助手

    
    /**
    * 获取指定url内所有参数obj
    * @param url 要处理的url
    */
    function getRequest(url) {
		let theRequest = {};
		if (url.indexOf('?') !== -1) {
			let str = url.substr(url.indexOf('?'), url.length);
			str = str.substr(1);
			let strs = str.split('&');
			for (let i = 0; i < strs.length; i++) {
				theRequest[strs[i].split('=')[0]] = unescape(strs[i].split('=')[1])
			}
		}
		return theRequest
    }

    /**
    * 获取当前url内指定参数
    * @param name 要获取的参数名
    */
    function getUrlParam(name) { 
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) return (r[2]);
        return null;
    }

    /**
    * 日期格式转换
    * @param fmt 要处理成的日期格式 例: 'yyyy-MM-dd hh:mm:ss'
    * @param date 要处理的日期,需Date类型
    */
	function dateFormat(fmt, date) {
		date = date ? date : new Date();
		let o = {
			"M+": date.getMonth() + 1, //月份
			"d+": date.getDate(), //日
			"h+": date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, //小时
			"H+": date.getHours(), //小时
			"m+": date.getMinutes(), //分
			"s+": date.getSeconds(), //秒
			"q+": Math.floor((date.getMonth() + 3) / 3), //季度
			"S": date.getMilliseconds() //毫秒
		};
		let week = {
			"0": "/u65e5",
			"1": "/u4e00",
			"2": "/u4e8c",
			"3": "/u4e09",
			"4": "/u56db",
			"5": "/u4e94",
			"6": "/u516d"
		};
		if (/(y+)/.test(fmt)) {
			fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
		}
		if (/(E+)/.test(fmt)) {
			fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "/u661f/u671f" : "/u5468") : "") + week[date.getDay() + ""]);
		}
		for (let 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;
    }

    /**
    *隐藏中间4位数的手机号码
    * @param val 要隐藏的手机号
    */
    function hidePhone(val){
        let tel = JSON.stringify(val);
        let reg=/(\d{3})\d{4}(\d{4})/;
        tel = tel.replace(reg, "$1****$2")
        return tel 
    }

    /**
    * 验证手机号码
    * @param val 要验证的手机号
    */
    function checkPhone(val) {
        if (!(/^1[3456789]\d{9}$/.test(val))) {
            return false;
        }
        return true;
    }

    /**
    * 验证身份证
    * @param val 要验证的身份证
    */
    function checkIdCard(val) {
        if (!(/(^\d{15}&)|(^\d{18})|(^\d{17}(\d|X|x)$)/.test(val))) {
            return false;
        }
        return true;
    }

    /**
    * 验证邮箱
    * @param val 要验证的邮箱
    */
    function checkIdCard(val) {
        if (!(/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(val))) {
            return false;
        }
        return true;
    }

    /**
    * 小数点后 四舍五入自动补两个零
    * @param val 要处理的数值
    */
	function amountFillZero(val) {
		val = Math.round(parseFloat(val) * 100) / 100;
		let dot = val.toString().split('.');
		if (dot.length === 1) {
			val = val.toString() + '.00';
		} else if (dot.length > 1) {
			if (dot[1].length < 2) {
				val = val.toString() + '0'
			}
		}
		return val
    }

    /**
    * 只能输入数字和两位小数
    * 举例:<input type="text" οninput="inputNum()" />
    * @param e
    */
    function inputNum(e){
        e.currentTarget.value =  e.currentTarget.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
        e.currentTarget.value =  e.currentTarget.value.replace(/^\./g,""); //验证第一个字符是数字
        e.currentTarget.value =  e.currentTarget.value.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
        e.currentTarget.value =  e.currentTarget.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
        e.currentTarget.value =  e.currentTarget.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
    }

    /**
    * 只能输入整数
    * 举例:<input type="text" οninput="inputIntegerNum()" />
    * @param e
    */
    function inputIntegerNum(e) {
        e.currentTarget.value = e.currentTarget.value.replace(/\D/gi,"")
    }

    /**
    * 去除字符串空格 
    * @param str 要处理的字符串
    * @param type 1:所有空格 2:前后空格 3:前空格 4:后空格
    */
    function strTrim(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; 
        }
    }

    /**
    * 字母大小写切换
    * @param str 要处理的字符串
    * @param type 1:首字母大写 2:首页母小写 3:大小写转换 4:全部大写 5:全部小写
    */
    function strChangeCase(str,type){
        function ToggleCase(str) {
            var itemText = ""
            str.split("").forEach(
                function (item) {
                    if (/^([a-z]+)/.test(item)) {
                        itemText += item.toUpperCase();
                    }
                    else if (/^([A-Z]+)/.test(item)) {
                        itemText += item.toLowerCase();
                    }
                    else{
                        itemText += item;
                    }
                });
            return itemText;
        }
        switch (type) {
            case 1:
                return str.replace(/^(\w)(\w+)/, function (v, v1, v2) {
                return v1.toUpperCase() + v2.toLowerCase();
            });
            case 2:
                return str.replace(/^(\w)(\w+)/, function (v, v1, v2) {
                return v1.toLowerCase() + v2.toUpperCase();
            });
        case 3:
            return ToggleCase(str);
        case 4:
            return str.toUpperCase();
        case 5:
            return str.toLowerCase();
        default:
            return str;
        }
    } 

    /**
    * 字符串替换
    * @param str 字符串
    * @param aFindText 要替换的字符
    * @param aRepText 替换成什么
    */
    function replaceAll(str,aFindText,aRepText){
        raRegExp = new RegExp(aFindText,"g") ;
        return str.replace(raRegExp,aRepText);
    }

    /**
    * 查找某个字符或字符串在另一个字符串中出现的次数
    * @param str 字符串
    * @param strSplit 要查找的字符或字符串
    * @returns {Number} 返回出现的次数
    */
    function countStr(str,strSplit){
        return str.split(strSplit).length-1
    }

    /**
    * 生成指定长度随机字符串
    * @param len 要生成字符串的长度
    */
	function RandomString(len) {
		len = len || 32;
		let chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
		let maxPos = chars.length;
		let pwd = '';
		for (let i = 0; i < len; i++) {
			pwd += chars.charAt(Math.floor(Math.random() * maxPos))
		}
		return pwd
    }

    /**
    * 数组去重 
    * @param arr 数组
    */
    function removeRepeatArray(arr) {
        return Array.from(new Set(arr))
    }
     /**
    * 数组去重针对object
    * @param arr 数组
    */
   function arrDelRepeatObj(arr) {
		var uniques = [];
		var stringify = {};
		for (var i = 0; i < arr.length; i++) {
			var keys = Object.keys(arr[i]);
			keys.sort(function(a, b) {
				return (Number(a) - Number(b));
			});
			var str = '';
			for (var j = 0; j < keys.length; j++) {
				str += JSON.stringify(keys[j]);
				str += JSON.stringify(arr[i][keys[j]]);
			}
			if (!stringify.hasOwnProperty(str)) {
				uniques.push(arr[i]);
				stringify[str] = true;
			}
		}
		uniques = uniques;
		return uniques;
		},
    /**
    * 获取数组的最大值,最小值,只针对数字类型的数组
    * @param arr 数组
    * @param type 0:最小值,1:最大值
    */
    function compareArr(arr, type) {
        if (type == 1) {
            return Math.max.apply(null, arr);
        } else {
            return Math.min.apply(null, arr);
        }
    }

    /**
    * 得到数组的和,只针对数字类型数组
    * @param arr 数组
    */
    function sumArr(arr) {
        var sumText = 0;
        for (var i = 0, len = arr.length; i < len; i++) {
            sumText += arr[i];
        }
        return sumText
    }

    /**
    * 返回某个元素在数组中出现的次数
    * @param arr 数组 
    * @param el 要查找的元素
    */
    function getElCount(arr, el) {
        var num = 0;
        for (var i = 0, len = arr.length; i < len; i++) {
            if (el == arr[i]) {
                num++;
            }
        }
        return num;
    }

    /**
    * 检测密码强度
    * @param str 字符串 
    * @returns 1:密码弱 2:密码中等 3:密码强 4:密码很强
    */
    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;
    }

    /**
    * 金额大写
    * @param price 要转换大写的金额
    */
    function digitUppercase(price) {
        let fraction = ['角', '分'];
        let digit = [
            '零', '壹', '贰', '叁', '肆',
            '伍', '陆', '柒', '捌', '玖'
        ];
        let unit = [
            ['元', '万', '亿'],
            ['', '拾', '佰', '仟']
        ];
        let head = price < 0 ? '欠' : '';
        price = Math.abs(price);
        let s = '';
        for (let i = 0; i < fraction.length; i++) {
            s += (digit[Math.floor(price * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
        }
        s = s || '整';
        price = Math.floor(price);
        for (let i = 0; i < unit[0].length && price > 0; i++) {
            let p = '';
            for (var j = 0; j < unit[1].length && price > 0; j++) {
                p = digit[price % 10] + unit[1][j] + p;
                price = Math.floor(price / 10);
            }
            s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
        }
        return head + s.replace(/(零.)*零元/, '元')
            .replace(/(零.)+/g, '零')
            .replace(/^整$/, '零元整');
    } 

    /**
    * 小于10 自动补零
    * @param num 要补零的数字
    */
    function addZero(num) {
        if (parseInt(num) < 10) {
            num = '0' + num
        }
        return num
    }

    /**
    * 获取今日 日期
    * @returns '2020-06-04'
    */
    function getToDay(){     
        let nowDate = new Date();  
        let month = Number(nowDate.getMonth()) + 1;     
        return nowDate.getFullYear() + "-" + addZero(month) + "-" + addZero(nowDate.getDate());     
    }

    /**
    * 获取明日 日期
    * @returns '2020-06-04'
    */
    function getTomorrow(){     
        let tom = new Date()
        tom.setDate(tom.getDate()+1);     
        let month = Number(tom.getMonth()) + 1;     
        return tom.getFullYear() + "-" + addZero(month) + "-" + addZero(tom.getDate());     
    }

    /**
    * 获取本周 第一天
    * @returns '2020-06-04'
    */
    function getWeekFirstDay(){     
        let nowDate = new Date();     
        let weekFirstDay = new Date(nowDate - (nowDate.getDay() -1 ) * 86400000);     
        let month = Number(weekFirstDay.getMonth()) + 1;    
        return weekFirstDay.getFullYear() + "-" + addZero(month) + "-" + addZero(weekFirstDay.getDate());     
    }

    /**
    * 获取本周 最后一天
    * @returns '2020-06-04'
    */
    function getWeekLastDay(){     
        let nowdate = new Date();     
        let weekFirstDay = new Date(nowdate - (nowdate.getDay() - 1) * 86400000);     
        let weekLastDay = new Date((weekFirstDay/1000 + 6*86400)*1000);     
        let month = Number(weekLastDay.getMonth()) + 1;     
        return weekLastDay.getFullYear() + "-" + addZero(month) + "-" + addZero(weekLastDay.getDate());     
    }

    /**
    * 获取本月 第一天
    * @returns '2020-06-04'
    */
    function getMonthFirstDay() {     
        let nowdate = new Date();     
        let monthFirstDay = new Date(nowdate.getFullYear(),nowdate.getMonth(),1);     
        let month =Number(monthFirstDay.getMonth()) + 1;     
        return monthFirstDay.getFullYear() + "-" + addZero(month) + "-" + addZero(monthFirstDay.getDate());     
    }

    /**
    * 获取本月 最后一天
    * @returns '2020-06-04'
    */
    function getMonthLastDay() {     
        let nowdate = new Date();     
        let monthNextFirstDay = new Date(nowdate.getFullYear(),nowdate.getMonth() + 1,1);     
        let monthLastDay = new Date(monthNextFirstDay - 86400000);     
        let month = Number(monthLastDay.getMonth()) + 1;     
        return monthLastDay.getFullYear() + "-" + addZero(month) + "-" + addZero(monthLastDay.getDate());     
    } 

    /**
    * 判断是在手机端|平板端|PC端
    * @returns 0:手机端 1:PC端 2:平板端
    */
    function os(){
        var ua = navigator.userAgent;
        isWindowsPhone = /(?:Windows Phone)/.test(ua),
        isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone,
        isAndroid = /(?:Android)/.test(ua),
        isFireFox = /(?:Firefox)/.test(ua),
        isChrome = /(?:Chrome|CriOS)/.test(ua),
        isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua)),
        isPhone = /(?:iPhone)/.test(ua) && !isTablet,
        isPc = !isPhone && !isAndroid && !isSymbian;
        if (isAndroid || isPhone) {
            return 0
        } else if(isPc) {
            return 1
        } else if (isTablet) {
            return 2
        }
    }

    /**
    * 获取操作系统类型
    * @returns 0:Android 1:iOS
    */
    function getOSType(){
        if (/(Android)/i.test(navigator.userAgent)) {
            return 0;
        } else if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
            return 1;
        } else {
            return 2;
        }
    }

    /**
    * 判断当前环境是否是微信环境
    */
    function isWeixin(){
        var ua = navigator.userAgent.toLowerCase();
        if(ua.match(/MicroMessenger/i) == "micromessenger") {
            return true;
        } else {
            return false;
        }
    }

    /**
    * 绘制带有间距的文本
    * @param text: 要绘制的文本
	* @param x: 绘制文本的起始x坐标
	* @param y: 绘制文本的起始y坐标
	* @param space: 文本间距
	* @param ctx: canvas对象
    */
    function canvasTextSpace(text, x, y, space, ctx) {
        let lineWidth = x;
        for(let i = 0; i < text.length; i++){
            if( i === 0) {
                ctx.fillText(text[i], x, y);
            }else {
                lineWidth += (space + ctx.measureText(text[i-1]).width);
                ctx.fillText(text[i], lineWidth, y);
            }
        }
    }

    /**
    * 文本超出maxWidtth宽度,自动换行
    * @param text: 要绘制的文本
	* @param x: 绘制文本的起始x坐标
	* @param y: 绘制文本的起始y坐标
	* @param space: 文本间距
	* @param ctx: canvas对象
    */
    function canvasTextAutoLine(text, x, y, lineHeight, maxWidtth, ctx){
        let textWidth = 0; // 文本宽度
        let lastSubStrIndex= 0;
        for(let i = 0; i < text.length; i++){
            textWidth += ctx.measureText(text[i]).width;
            if(textWidth > maxWidtth){
                ctx.fillText(text.substring(lastSubStrIndex,i), x, y);
                textWidth = 0;
                lastSubStrIndex = i;
                y += lineHeight
            }
            if(i === text.length - 1){
                ctx.fillText(text.substring(lastSubStrIndex,text.length), x, y);
            }
        }
    }
    
    /**
    * 文本超出maxWidtth宽度,自动换行
    * @param text: 要绘制的文本
	* @param x: 绘制文本的起始x坐标
	* @param y: 绘制文本的起始y坐标
	* @param maxWidtth: 文本最大宽度
	* @param ctx: canvas对象
    */
    function canvasTextEllipsis(text, x, y, maxWidtth, ctx){
        let textWidth = 0; // 文本原长度
        let addDotTextWidth = 0; // 如果超出 文本的显示的实际长度
        let lastSubStrIndex = 0;
        let dotCount = 0; // 如果文本带有... 先记录下此时的文本长度
        let count = 0; // 如果文本超出 画...
        let dotWidth = ctx.measureText(' ...').width; // 计算 ...的宽度
        for(let i = 0; i < text.length; i++){
            textWidth += ctx.measureText(text[i]).width;
            if(textWidth > maxWidtth - dotWidth && !dotCount){
                addDotTextWidth = textWidth - ctx.measureText(text[i]).width
                lastSubStrIndex = i;
                dotCount++
            }
            if(textWidth > maxWidtth && !count) {
                count++
                ctx.fillText(' ...', x + addDotTextWidth, y);
            }
            if(i === text.length - 1){
                ctx.fillText(text.substring(0,count ? lastSubStrIndex : text.length), x, y);
            }
        }
    }
    
    ```

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 uni-app 中,可以使用 Vue.js 的 mixin 方法来创建公共JavaScript 方法。 例如,在创建一个 mixin 对象并添加一个公共方法: ``` const myMixin = { methods: { myMethod() { console.log('Hello from myMethod') } } } ``` 然后,在你的 Vue 组件中引用这个 mixin: ``` export default { mixins: [myMixin], // ... } ``` 这样,在你的组件中就可以使用 `myMethod` 方法了。 注意:在 mixin 中定义的方法名如果与组件中的 data、computed、methods 中的属性名重名,则会被组件中的属性覆盖。 ### 回答2: 创建一个公共JS方法可以将其定义在一个utils.js文件中,然后将该文件引入到uniapp的相关页面中。 首先,创建一个名为utils.js的新文件,并在文件中定义一个公共JS方法,以便在整个uniapp应用中使用。例如,我们创建一个名为formatDate的方法用于格式化日期: ```javascript // utils.js export function formatDate(date) { // 逻辑代码,对日期进行格式化处理 } ``` 然后,在需要使用公共JS方法的页面中,通过import语句引入utils.js文件: ```javascript import { formatDate } from '@/utils.js' export default { data() { return { // 页面数据 } }, methods: { // 其他方法 handleDate() { const currentDate = new Date() const formattedDate = formatDate(currentDate) console.log(formattedDate) } } } ``` 在具体的页面逻辑中,我们可以通过调用`formatDate`方法来使用公共JS方法,并将返回值保存在需要的变量中或者进行其他逻辑操作。 需要注意的是,为了在uniapp中使用ES6模块化的语法(如 import/export),需要将utils.js文件的后缀名更改为.js,且在引入时使用@符号来代表uniapp项目的根目录。 这样通过创建并引入utils.js文件,我们就可以很方便地在uniapp应用的不同页面中使用公共JS方法了。 ### 回答3: 使用Uniapp创建一个公共JS方法可以有很多种实现方式,下面我列举了一种常用方法。 首先,在Uniapp项目的根目录下创建一个`common.js`文件,用来存放公共JS方法。 然后,可以定义一些常用的函数,例如: 1. 格式化日期函数:可以用来将时间戳转换成指定格式的日期字符串。 ```javascript function formatDate(timestamp, format) { const date = new Date(timestamp); const year = date.getFullYear(); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const day = date.getDate().toString().padStart(2, '0'); const hour = date.getHours().toString().padStart(2, '0'); const minute = date.getMinutes().toString().padStart(2, '0'); const second = date.getSeconds().toString().padStart(2, '0'); const formatObj = { 'yyyy': year, 'MM': month, 'dd': day, 'HH': hour, 'mm': minute, 'ss': second }; return format.replace(/(yyyy|MM|dd|HH|mm|ss)/g, key => formatObj[key]); } // 调用示例 const timestamp = new Date().getTime(); const formattedDate = formatDate(timestamp, 'yyyy-MM-dd HH:mm:ss'); // 输出示例:'2022-01-01 12:00:00' ``` 2. 验证手机号函数:可以用来判断输入的手机号是否符合指定的手机号格式要求。 ```javascript function isPhoneNumber(phoneNumber) { const pattern = /^1[3-9]\d{9}$/; return pattern.test(phoneNumber); } // 调用示例 const phoneNumber = '13812345678'; const isValidPhoneNumber = isPhoneNumber(phoneNumber); // 输出示例:true ``` 3. 加密函数:可以用来对敏感信息进行加密,保护用户隐私。 ```javascript function encryptData(data) { // 加密算法的实现逻辑 // ... return encryptedData; } // 调用示例 const sensitiveData = '这是一段敏感信息'; const encryptedData = encryptData(sensitiveData); // 输出示例:'oi13TRj4qW...' ``` 这是一个简单的示例,你可以根据项目的需求,自定义更多的公共函数,并在需要的地方引入`common.js`文件,然后调用对应的函数即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘家军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值