exportconst intToRomanData ={1:'I',5:'V',10:'X',50:'L',100:'C',500:'D',1000:'M'}exportconst romanToIntData ={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}/**
* 罗马数字和整数互换
* @param {*} v
*/exportconstintInterconversionRoman=(v)=>{let result =0let index =0if(typeof(v)==='string'){const len = v.length
while(index < len){let current = romanToIntData[v[index]]
result += current
if(index >0){let before = romanToIntData[v[index -1]]if((current ===5|| current ===10)&& before ===1){
result -=2}if((current ===50|| current ===100)&& before ===10){
result -=20}if((current ===500|| current ===1000)&& before ===100){
result -=200}}
index++}}elseif(typeof(v)==='number'){
index =1
result =''while(v){let current = v %10if(current <4){
result = intToRomanData[index].repeat(current)+ result
}elseif(current ===4){
result = intToRomanData[index]+ intToRomanData[index *5]+ result
}elseif(current >4&& current <9){
result = intToRomanData[index *5]+ intToRomanData[index].repeat(current -5)+ result
}else{
result = intToRomanData[index]+ intToRomanData[index *10]+ result
}
index *=10
v = Math.trunc(v /10)}}else{returnnewError('传参类型错误')}return result
}
格式化时间
/**
* 格式化时间
* @param {*} fmt
* @param {*} dateString
* @returns
*/exportconstfmtDate=function(fmt, dateString){const date =newDate(dateString);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 =newRegExp("("+ 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;}
浏览器刷新提示
/**
* 浏览器刷新提示框
* @param {vue实例} that
* @param {路由} route
*/exportconstbeforeUnloadFunc=(that, route)=>{
window.onbeforeunload=function(e){if(that.$route.fullPath == route){// 注意这里要替换成自己的当前页面的路由
e = e || window.event;// 兼容IE8和Firefox 4之前的版本if(e){
e.returnValue ='关闭提示';}// Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+return'关闭提示';}else{
window.onbeforeunload =null}};}
/**
* 中文转首字母
*/importhttps://download.csdn.net/download/weixin_49884775/87352808exportconst PinYin =class{chineseToPinYin(l1){let l2 = l1.length
letI1=''let reg =newRegExp('[a-zA-Z0-9]')for(let i =0; i < l2; i++){let val = l1.substr(i,1)let name =this.arraySearch(val)if(reg.test(val)){I1+= val
}elseif(name !==false){I1+= name
}}I1=I1.replace(//g,'-')while(I1.indexOf('--')>0){I1=I1.replace('--','-')}returnI1[0].toUpperCase()}arraySearch(l1){for(let name in pinyin){if(pinyin[name].indexOf(l1)!==-1){returnthis.ucfirst(name)}}returnfalse}ucfirst(l1){if(l1.length >0){let first = l1.substr(0,1).toUpperCase()let spare = l1.substr(1, l1.length)return first + spare
}}}
计算数组重复次数
/**
* 计算数组重复次数
*/exportconstcountOccurrences=(arr, val)=>
arr.reduce((a, v)=>(v === val ? a +1: a),0)