cjl_npm_tools
Version:
提供了关于时间,日期方面的方法,还有像深度拷贝,封装的百度翻译,16进制颜色转换等
214 lines (196 loc) • 5.98 kB
JavaScript
//千分位分隔符
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
}