积累一些实用的小技巧
1、表单页面防止浏览器自动填充密码
<!-- 用于防止浏览器自动填充密码 -->
<input type="password" clearable hidden autocomplete="new-password" style="display: none" />
2、JS随机整数
//传入参数,获取区间范围,如:[0,4) 获取随机0-3的整数
Random(min, max) {
return Math.round(Math.random() * (max - min)) + min;
},
3、正则替换指定字符串
//遍历整个字符串,把 \\ 的替换成 /
let str = '\\image\\xxx/555'
str = str..replace(/\\/g, '/');
4、JS时间格式化
//1、str为分钟数(number)转换为: xx时xx分
timeFormat = function(str) {
return ((Math.floor(str / 60 % 24).toString().length < 2 ? '0' + Math.floor(str / 60 % 24).toString() : Math.floor(str / 60 % 24).toString()) + '时' + ((str % 60).toString().length < 2 ? '0' +(str % 60).toString() : (str % 60).toString()) + '分')
}
//2、需要格式化的格式:YYYY-mm-dd HH:MM 表示2021-06-06 19:45,参数可传入 毫秒 或者其他日期
//调用:dateFormat('YYYY-mm-dd','2021-06-12'),根据格式返回对应格式
dateFormat = function(fmt, date1){
let date = new Date(date1)
let ret;
const opt = {
"Y+": date.getFullYear().toString(), // 年
"m+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"H+": date.getHours().toString(), // 时
"M+": date.getMinutes().toString(), // 分
"S+": date.getSeconds().toString(), // 秒
};
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) {
fmt = fmt.replace(
ret[1],
ret[1].length == 1
? opt[k]
: opt[k].padStart(ret[1].length, "0")
);
}
}
return fmt;
}
//3、格式化日期转换秒 00:00:00 → 10s
ToSeconds(time){
var str = time;
var arr = str.split(':');
var hs = parseInt(arr[0]*3600);
var ms = parseInt(arr[1]*60);
var ss = parseInt(arr[2]);
var seconds = hs + ms + ss;
return seconds;
}
5、uuid
uuid: function () {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = "-";
var uuid = s.join("");
return uuid;
}
uuid16: function () {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 16; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
// s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
// s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
var uuid = s.join("");
return uuid;
}
6、JS计算精度丢失问题(金额计算)
/**
* 折扣商品的价格计算,discount:数量 ,currentPrice:价格
* 3*5,3是被乘数,5是乘以数
*/
function calculate(discount, currentPrice) {
let res = +(Math.round((discount * currentPrice + 0.000001) * 100) / 100).toFixed(2);
return res ? res : 0.01;
}
7、分数转小数
export const toPoint = (percentg) => {
let str = percent.replace("%", "");
str = str / 100;
return str;
}
8、小数转分数
export const toPercent = (point) => {
// let str = Number(point * 100).toFixed(1);
let str= Number(point * 100);
str += "%";
return str;
}
9、加法函数
/**
* 加法函数
* @param arg1 加数
* @param arg2 被加数
* @returns arg1 + arg2的精确结果
*/
export const accAdd = (arg1, arg2) => {
let r1, r2, m;
try {
r1 = arg1.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2));
return (arg1 * m + arg2 * m) / m;
}
10、减法函数
/**
* 减法函数
* @param arg1 减少数
* @param arg2 被减数
* @returns arg2 - arr1 的精确结果
*/
export const accSub = (arg1, arg2) => {
let r1, r2, m, n;
try {
r1 = arg1.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2));
//last modify by deeka
//动态控制精度长度
n = (r1 >= r2) ? r1 : r2;
return ((arg2 * m - arg1 * m) / m).toFixed(n);
}
11、乘法
/**
*
* @param arg1 被乘数
* @param arg2 乘于数
* @returns arg1 * arg2的精确结果
*/
export const accMul = (arg1, arg2) => {
let m = 0,
s1= arg1.toString(),
s2 = arg2.toString();
try {
m += s1.split(".")[1].length
} catch (e) { }
try {
m += s2.split(".")[1].length
} catch (e) { }
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}
12、除法
/**
* 除法函数,用来得到精确的除法结果
* - 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
* @param arg1 被除数
* @param arg2 除于数
* @returns arg1 / arg2的精确结果
*/
export const accDiv = (arg1, arg2) => {
let t1 = 0,
t2= 0,
r1, r2;
try {
t1 = arg1.toString().split(".")[1].length
} catch (e) { }
try {
t2 = arg2.toString().split(".")[1].length
} catch (e) { }
r1 = Number(arg1.toString().replace(".", ""));
r2 = Number(arg2.toString().replace(".", ""));
if (r2 == 0) {
return Infinity;
} else {
return ((r1 / r2) * Math.pow(10, t2 - t1)).toFixed(2);
}
}