企业网站建设的常见流程为,安装wordpress 简书,seo查询网站是什么,自己做网站需要啥文章目录 各种函数收集#xff0c;持续更新~1. 数组对象去重2. 时间转换函数3. 深拷贝4. js精度问题解决#xff08;加减乘除#xff09;5. toFiexed函数重写6.手机号校验与隐藏手机号中间4位7. 身份证号校验与加密校验位检测15位转18位身份证8. 千位符格式化#xff08;12… 文章目录 各种函数收集持续更新~1. 数组对象去重2. 时间转换函数3. 深拷贝4. js精度问题解决加减乘除5. toFiexed函数重写6.手机号校验与隐藏手机号中间4位7. 身份证号校验与加密校验位检测15位转18位身份证8. 千位符格式化123,456 各种函数收集持续更新~
1. 数组对象去重
使用reduce,自己看着改
let arr [{id: 1, name: 周瑜},{id: 3, name: 王昭君},{id: 2, name: 亚瑟},{id: 1, name: 小乔},{id: 2, name: 大桥},{id: 3, name: 韩信}
];
let obj {}
arr arr.reduce((preVal,curVal) {obj[curVal.id] ? : obj[curVal.id] preVal.push(curVal)return preVal},[])
console.log(arr)
2. 时间转换函数
第一个参数是输入的时间标准格式或时间戳格式都可
第二个参数是输出的样子要啥写啥样全部是这样 ‘yyyy-MM-dd hh:mm:ss’
export function formatDate(t, formatyyyy-MM-dd) {if(t||t0||tnull||tnull){return ;}if(typeof t string){t t.replace(new RegExp(/-/gm) ,/);}const d new Date(t);const o {M : d.getMonth() 1,// monthd : d.getDate(),// dayh : d.getHours(),// hourm : d.getMinutes(),// minutes : d.getSeconds(),// secondq : Math.floor((d.getMonth() 3) / 3),// quarterS : d.getMilliseconds()// millisecond};if (/(y)/.test(format) || /(Y)/.test(format)) {format format.replace(RegExp.$1, (d.getFullYear() ).substr(4 - RegExp.$1.length));}for ( let 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;
}获取当前时间的上个月
export function getLastMonth() {//获取上个月日期const date new Date();let year date.getFullYear();let month date.getMonth();if (month 0) {year year - 1;month 12;}month (month ).length 1 ? 0 month : monthreturn year - month;
}3. 深拷贝
export function deepClone(source) {if (!source typeof source ! object) {throw new Error(error arguments, deepClone)}const targetObj source.constructor Array ? [] : {}Object.keys(source).forEach(keys {if (source[keys] typeof source[keys] object) {targetObj[keys] deepClone(source[keys])} else {targetObj[keys] source[keys]}})return targetObj
}4. js精度问题解决加减乘除
加
export function accAdd(arg1, arg2) {let r1, r2, m, c;try {r1 arg1.toString().split(.)[1].length;}catch (e) {r1 0;}try {r2 arg2.toString().split(.)[1].length;}catch (e) {r2 0;}c Math.abs(r1 - r2);m Math.pow(10, Math.max(r1, r2));if (c 0) {const cm Math.pow(10, c);if (r1 r2) {arg1 Number(arg1.toString().replace(., ));arg2 Number(arg2.toString().replace(., )) * cm;} else {arg1 Number(arg1.toString().replace(., )) * cm;arg2 Number(arg2.toString().replace(., ));}} else {arg1 Number(arg1.toString().replace(., ));arg2 Number(arg2.toString().replace(., ));}return (arg1 arg2) / m;
}减
跟上面加法配合用
export function accSub(arg1, arg2) {return accAdd(arg1, -arg2);
}
乘
export function accMul(arg1,arg2) {let m0,s1arg1.toString(),s2arg2.toString();try{ms1.split(.)[1].length}catch(e){}try{ms2.split(.)[1].length}catch(e){}return Number(s1.replace(.,))*Number(s2.replace(.,))/Math.pow(10,m);
}除
export function 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(., ));return (r1 / r2) * Math.pow(10, t2 - t1);
}5. toFiexed函数重写 重写原因toFixed的四舍五入规则有问题是四舍六入五成双解决办法重写 Number.prototype.toFixed function (n) {if (n 20 || n 0) {throw new RangeError(toFixed() digits argument must be between 0 and 20);}const number this;if (isNaN(number) || number Math.pow(10, 21)) {return number.toString();}if (typeof (n) undefined || n 0) {return (Math.round(number)).toString();}// 判断是正数还是负数let isPositive true;if(parseFloat(number)0){isPositive false;}let result number.toString();// 增加判断科学计数法的支持只处理绝对值小于1的小数科学技术法if(result.indexOf(e)0Math.abs(number)1){result scienceToString(number);}const arr result.split(.);// 整数的情况if (arr.length 2) {result .;for (let i 0; i n; i 1) {result 0;}return result;}const integer arr[0];const decimal arr[1];if (decimal.length n) {return result;}if (decimal.length n) {for (let i 0; i n - decimal.length; i 1) {result 0;}return result;}result integer . decimal.substr(0, n);const last decimal.substr(n, 1);// 四舍五入转换为整数再处理避免浮点数精度的损失if (parseInt(last, 10) 5) {const x Math.pow(10, n);if(isPositive){result (Math.round((parseFloat(result) * x)) 1) / x;} else {result (Math.round((parseFloat(result) * x)) - 1) / x;}result result.toFixed(n);}return result;
};6.手机号校验与隐藏手机号中间4位
//这个函数是先判断传入的是否是手机号function isMobile(mobileNumber){var reg /^((1[3456789]{1}[0-9]{1})\d{8})$/;// var reg /^[1][3,4,5,7,8][0-9]{9}$/;return reg.test(mobileNumber);
}
//然后再隐藏手机号中间4位function hideMobile(mobileNumber, mode) {if(mode visible){return mobileNumber;}if(!mobileNumber){return ;}//判断非空if(isMobile(mobileNumber)){//判断是否是手机号var reg /^(\d{3})\d{4}(\d{4})$/;//手机加密return mobileNumber.replace(reg, $1****$2);}else{if(mobileNumber.length7){//固话加密return mobileNumber.substr(0,mobileNumber.length-2)**;}return mobileNumber;}
}7. 身份证号校验与加密校验位检测15位转18位身份证
//身份证号加密
export function hideIdCard(idCardNumber, mode) {if(mode visible){return idCardNumber;}if(!idCardNumber){return ;}//判断非空if(checkCertificateNo(idCardNumber)){//判断是否是身份证号return idCardNumber.substring(0,3)****; //身份证加密}
}
//身份证号的验证
export function checkCertificateNo(num) {let len num.length, re;if (len 15)re new RegExp(/^([0-9]{6})()?([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{3})$/);else if (len 18)re new RegExp(/^([0-9]{6})()?([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{3})([0-9Xx])$/);else {//alert(请输入15或18位身份证号,您输入的是 len 位);return false;}let a num.match(re);if (a ! null) {if (len 15) {var D new Date(19 a[3] / a[4] / a[5]);var B D.getYear() a[3] (D.getMonth() 1) a[4] D.getDate() a[5];} else {var D new Date(a[3] / a[4] / a[5]);var B D.getFullYear() a[3] (D.getMonth() 1) a[4] D.getDate() a[5];}if (!B) {//alert(输入的身份证号 a[0] 里出生日期不对);return false;}} else {return false;}// 验证最后一位的校验位if(checkParity(num) false){return false;}return true;
}//校验位的检测
const checkParity function(obj)
{//15位转18位obj changeFivteenToEighteen(obj);var len obj.length;if(len 18){var arrInt [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];var arrCh [1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2];var cardTemp 0, i, valnum;for(i 0; i 17; i ){cardTemp obj.substr(i, 1) * arrInt[i];}valnum arrCh[cardTemp % 11];if (valnum obj.substr(17, 1)){return true;}return false;}return false;
};//15位转18位身份证号
const changeFivteenToEighteen function(obj)
{if(obj.length 15){var arrInt [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];var arrCh [1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2];var cardTemp 0, i;obj obj.substr(0, 6) 19 obj.substr(6, obj.length - 6);for(i 0; i 17; i ){cardTemp obj.substr(i, 1) * arrInt[i];}obj arrCh[cardTemp % 11];return obj;}return obj;
};8. 千位符格式化123,456
export function milliFormat(num) {return num num.toString().replace(/\d/, function(s){return s.replace(/(\d)(?(\d{3})$)/g, $1,)})
}千位符格式化且可以保留两位小数
export function formatter(number) {if(number) {return String(number).replace(/\B(?(\d{3})(?!\d))/g, ,)} else {return 0.00}
}