UNPKG

cjl_npm_tools

Version:

提供了关于时间,日期方面的方法,还有像深度拷贝,封装的百度翻译,16进制颜色转换等

214 lines (196 loc) 5.98 kB
//千分位分隔符 function escapeThousands (int){ let num = (int || 0).toString(), result = ''; while(num.length > 3) { result = ',' + num.slice(-3) + result; num = num.slice(0, num.length - 3); } if (num) { result = num + result; } return result; } //16进制颜色转换(color:颜色,opacity:透明度) function getHexOpacityColor(color,opacity){ opacity = Math.max(opacity,0); opacity = Math.min(opacity,1); color = color.replace(/\#/g,'').toUpperCase(); if(color.length === 3){ let arr = color.split(''); color = ''; for (let i = 0; i < arr.length; i++) { color += (arr[i] + arr[i]);//将简写的3位字符补全到6位字符 } } let num = Math.round(255 * opacity);//四舍五入 let str = ''; let arrHex = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];//十六进制数组 while (num>0) { let mod = num % 16; num = (num - mod) / 16; str = arrHex[mod] + str; } if(str.length == 1)str = '0' + str; if(str.length == 0)str = '00'; return `#${color+str}`; } // 深度拷贝 function deepClone(obj) { // Handle the 3 simple types, and null or undefined if (obj == null || typeof obj !== "object") return obj; // Handle Date if (obj instanceof Date) { var copy = new Date(); copy.setTime(obj.getTime()); return copy; } // Handle Array if (obj instanceof Array) { var copy = []; for (let i = 0, len = obj.length; i < len; ++i) { copy[i] = deepClone(obj[i]); } return copy; } // Handle Object if (obj instanceof Object) { var copy = {}; for (const attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = deepClone(obj[attr]); } return copy; } throw new Error("Unable to copy obj! Its type isn't supported."); } //灵活排序('property':根据哪一个属性名进行排序,'bol':true(倒叙),false(顺序)) function SotrPare(property, bol){ return function(a, b) { var value1 =renderTime(a[property]); var value2 =renderTime(b[property]); if (bol) { // 升序 return Date.parse(value1) - Date.parse(value2); } else { // 降序 return Date.parse(value2) - Date.parse(value1) } } } //版本号比较:当第一个版本curV>第二个版本reqV时,返回true function compare(curV, reqV){ if (curV && reqV) { //将两个版本号拆成数字 var arr1 = curV.split('.'); var arr2 = reqV.split('.'); var minLength = Math.min(arr1.length, arr2.length), position = 0, diff = 0; //依次比较版本号每一位大小,当对比得出结果后跳出循环(后文有简单介绍) while (position < minLength && ((diff = parseInt(arr1[position]) - parseInt(arr2[position])) == 0)) { position++; } diff = (diff != 0) ? diff : (arr1.length - arr2.length); //若curV大于reqV,则返回true // return diff > 0; if(diff>0){ return 1 } else if(diff==0){ return 0 } else{ return -1 } } else if(curV){ return 1 } else{ throw new Error("第一个参数不能为空") } } //检测数组中是否存在重复元素,如果出现两次就返回true,如果不存在重复元素则返回false function containsDuplicate (nums){ return nums.length!=new Set(nums).size } //找出数组内最小的数 function mathMin(arr){ var min = arr[0]; for(var i = 1; i < arr.length; i++) { if(arr[i] < min) { min = arr[i]; } } return min; } //封装百度翻译(安装js-md5(请求加密),vue-jsonp)-----(先注册,拿到appid与key) function translate(value, lang){ let appid = '20210113000670181'; let key = 'dPWazc8KGYxJSOBgq1jz'; let salt = (new Date).getTime(); let query = value; //源语言 let from = 'zh'; //需要被翻译的语言(目标语言) let to = 'en'; //后续维护可能存在中英文互翻 if (lang == 'zh') { from = 'en'; to = lang; } let str = appid + query + salt + key; //md5加密,生成签名 let sign = md5(str); return VueJsonp.jsonp("https://api.fanyi.baidu.com/api/trans/vip/translate?q=" + encodeURIComponent(query) + "&from=" + from + "&to=" + to + "&appid=" + appid + "&salt=" + salt + "&sign=" + sign) } async function MTtrans(e, lang) { if (!e) return '' let mactranslate='' // 传进来的参数删掉前后空格 e.replace(/(^\s*)|(\s*$)/g, "") const res =await translate(e, lang) mactranslate = res.trans_result[0].dst return mactranslate } //数据扁平化 function getMoreTree(arr){ let newArr=[]; for(let i=0;i<arr.length;i++){ if(arr[i].children){ newArr.push(...getMoreTree(arr[i].children)); delete arr[i].children; } newArr.push({...arr[i]}); } return newArr } //将数据处理成树 function getTree(data){ data.forEach(item=>{ const children=data.filter(({parentid})=>parentid===item.id) if(children.length) item.children=children }) const res=data.filter(({parentid})=>parentid===0) res.forEach((item)=>getresultName(item)) return res } //构造children子级目录与子级目录中所对应的父级名称 function getresultName(result,parentName=''){ result.resName=`${parentName}`+`${result.name}` result.parent_name=`${result.name}` if(result.children){ result.children.forEach(i=>getresultName(i,`${result.resName}/`)) } } module.exports={ escapeThousands, deepClone, getHexOpacityColor, SotrPare, compare, containsDuplicate, mathMin, MTtrans, getMoreTree, getTree }