// 数组去重
export function uniqueArr(arr) {
return Array.from(new Set(arr))
}
// 获取字节长度
export function byteLength(str) {
let s = str.length
for (var i = str.length - 1; i >= 0; i--) {
const code = str.charCodeAt(i)
if (code > 0x7f && code <= 0x7ff) s++
else if (code > 0x7ff && code <= 0xffff) s += 2
if (code >= 0xDC00 && code <= 0xDFFF) i--
}
return s
}
// 解码并提取url地址中的参数
export function getUrlbject(url) {
url = url == null ? window.location.href : url
const search = url.substring(url.lastIndexOf('?') + 1)
const obj = {}
const reg = /([^?&=]+)=([^?&=]*)/g
search.replace(reg, (rs, $1, $2) => {
const name = decodeURIComponent($1)
let val = decodeURIComponent($2)
val = String(val)
obj[name] = val
return rs
})
return obj
}
// 深拷贝--递归
export function deepClone(target) {
let result;
// 如果当前需要深拷贝的是一个对象的话
if (typeof target === 'object') {
// 如果是一个数组的话
if (Array.isArray(target)) {
result = []; // 将result赋值为一个数组,并且执行遍历
for (let i in target) {
// 递归克隆数组中的每一项
result.push(deepClone(target[i]))
}
} else if (target === null) {
result = null;
// 判断如果当前的值是一个RegExp对象的话,直接赋值
} else if (target.constructor === RegExp) {
result = target;
} else {
// 否则是普通对象,直接for in循环,递归赋值对象的所有值
result = {};
for (let i in target) {
result[i] = deepClone(target[i]);
}
}
// 如果不是对象的话,就是基本数据类型,那么直接赋值
} else {
result = target;
}
return result;
}
// 脱敏处理-字符显示为*
export function desensitization(str, beginLen, endLen) {
var len = str.length;
var firstStr = str.substr(0, beginLen);
var lastStr = str.substr(endLen);
var middleStr = str.substring(beginLen, len - Math.abs(endLen)).replace(/[\s\S]/ig, '*');
let tempStr = firstStr + middleStr + lastStr;
return tempStr;
}
// 复制到剪切板
export function copyToClipboard(str) {
const el = document.createElement('textarea');
el.value = str;
el.setAttribute('readonly', '');
el.style.position = 'absolute';
el.style.left = '-9999px';
document.body.appendChild(el);
el.select();
document.execCommand('copy');
document.body.removeChild(el);
}
// 金额转化为大写汉字
export function digitUppercase(price) {
let fraction = ['角', '分'];
let digit = [
'零', '壹', '贰', '叁', '肆',
'伍', '陆', '柒', '捌', '玖'
];
let unit = [
['元', '万', '亿'],
['', '拾', '佰', '仟']
];
let head = price < 0 ? '欠' : '';
price = Math.abs(price);
let s = '';
for (let i = 0; i < fraction.length; i++) {
s += (digit[Math.floor(price * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
}
s = s || '整';
price = Math.floor(price);
for (let i = 0; i < unit[0].length && price > 0; i++) {
let p = '';
for (var j = 0; j < unit[1].length && price > 0; j++) {
p = digit[price % 10] + unit[1][j] + p;
price = Math.floor(price / 10);
}
s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
}
return head + s.replace(/(零.)*零元/, '元')
.replace(/(零.)+/g, '零')
.replace(/^整$/, '零元整');
}
// 千分位去掉逗号
export function delNumFormat(snum) {
return snum.replace(/,/g, '');
}
//在cookie定义值
export function setCookie(name, value) {
var curWwwPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curWwwPath.indexOf(pathName);
var localhostPath = curWwwPath.substring(0, pos); //获取地址到端口号
var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1); //项目名
localhostPath = localhostPath.replace(/\"/g, "");
projectName = projectName.replace(/\"/g, "");
if (value) {
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
}
};
/**
* cookie中取值
* */
export function getCookie(name) {
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); //匹配字段
if (arr = document.cookie.match(reg)) {
return unescape(arr[2]);
} else {
return null;
}
};
/**
* 清除指定cookie值
* */
export function delCookie(name) {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = setCookie(name);
if (cval && cval != null) {
// document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString() + ";path=/video_learning" + ";domain=localhost";
document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString() + ";path=/video_learning" + ";domain=localhost";
}
};
/**
* 清除全部cookie值
* */
export function clearCookie() {
var curWwwPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curWwwPath.indexOf(pathName);
var localhostPath = curWwwPath.substring(0, pos); //获取地址到端口号
var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1); //项目名
localhostPath = localhostPath.replace(/\"/g, "");
projectName = projectName.replace(/\"/g, "");
var keys = document.cookie.match(/[^ =;]+(?=\=)/g);
if (keys) {
for (var i = keys.length; i--;) {
// document.cookie = keys[i] +'=0;expires=' + new Date( 0).toUTCString() + ";path=/video_learning" + ";domain=localhost";
// document.cookie = keys[i] +'=0;expires=' + new Date( 0).toUTCString() + ";path=" + projectName + ";domain=" + localhostPath;
document.cookie = keys[i] + '=0;expires=' + new Date(0).toUTCString() + ";path=" + projectName + ";domain=" + GetCookieDomain();
}
}
};
export default {
uniqueArr,
byteLength,
getUrlbject,
deepClone,
desensitization,
copyToClipboard,
digitUppercase,
delNumFormat,
setCookie,
getCookie,
delCookie,
clearCookie
}
前端常见的公共方法
最新推荐文章于 2024-07-19 11:23:25 发布