项目应用-javaScript-封装工具类
数组去重
const uniqueArr = (arr) => [...new Set(arr)];
两日期之间相差的天数
const dayDiff = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000);
dayDiff(new Date("2021-10-21"), new Date("2022-02-12"))
// Result: 114
根据日期分类(年-月-日)
/**
* arr Arrary 原数组
* type String 根据分组的字段
**/
export function catgoryYearMonthDay(arr, type) {
// 假如数据是你想要的,忽略此步骤
arr.forEach(item => {
item.catgoryTime = item[type].slice(0, 10)
})
let newArr = []
arr.forEach((item, i) => {
let index = -1
let isExists = newArr.some((newItem, j) => {
if (item.catgoryTime == newItem.catgoryTime) {
index = j;
return true;
}
})
if (!isExists) {
newArr.push({
catgoryTime: item.catgoryTime,
subList: [item]
})
} else {
newArr[index].subList.push(item);
}
});
return newArr;
}
数字转字符
export function formatNumber(n) {
const str = n.toString()
return str[1] ? str : `0${str}`
}
判断是否包含特殊符号 含有特殊字符包括空格返回 true
export function isCharacters(val) {
if (val.match(/^[a-zA-Z0-9\u4e00-\u9fa5]+$/g)) {
return false;
} else {
return true
}
};
判断是否包含表情
export function isEmoji(substring) {
for (var i = 0; i < substring.length; i++) {
var hs = substring.charCodeAt(i);
if (0xd800 <= hs && hs <= 0xdbff) {
if (substring.length > 1) {
var ls = substring.charCodeAt(i + 1);
var uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <= 0x1f77f) {
return true;
}
}
} else if (substring.length > 1) {
var ls = substring.charCodeAt(i + 1);
if (ls == 0x20e3) {
return true;
}
} else {
if (0x2100 <= hs && hs <= 0x27ff) {
return true;
} else if (0x2B05 <= hs && hs <= 0x2b07) {
return true;
} else if (0x2934 <= hs && hs <= 0x2935) {
return true;
} else if (0x3297 <= hs && hs <= 0x3299) {
return true;
} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 ||
hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b ||
hs == 0x2b50) {
return true;
}
}
}
}
判断手机号是否正确
export function testPhone(phone) {
let phoneReg = /(^1[3|4|5|6|7|8|9]\d{9}$)|(^09\d{8}$)/;
return phoneReg.test(phone);
}
判断邮箱
export function testEmail(email) {
var reg = new RegExp("^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$");
return reg.test(email);
}
判断身份证
export function idCardCheck(idNo) {
var regIdNo = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if (!regIdNo.test(idNo)) {
return false;
} else {
return true;
}
}
两个数组求差
export function diff(arr1, arr2) {
var newArr = [];
var arr3 = [];
for (var i = 0; i < arr1.length; i++) {
if (arr2.indexOf(arr1[i]) === -1)
arr3.push(arr1[i]);
}
var arr4 = [];
for (var j = 0; j < arr2.length; j++) {
if (arr1.indexOf(arr2[j]) === -1)
arr4.push(arr2[j]);
}
newArr = arr3.concat(arr4);
return newArr;
}
计算评分(多少星星)
export function starNum(num) {
let fill = [];
let half = [];
let empty = [];
let fillNum = parseInt(num);
let halfNum = 0;
if (num % 1) halfNum = 1;
let emptyNum = 5 - fillNum - halfNum;
for (let i = 0; i < fillNum; i++) {
fill.push(1);
}
for (let i = 0; i < halfNum; i++) {
half.push(1);
}
for (let i = 0; i < emptyNum; i++) {
empty.push(1);
}
let obj = {
fill: fill,
half: half,
empty: empty
}
return obj;
}
根据经纬度计算两地之差
export function distance(la1, lo1, la2, lo2) {
var La1 = la1 * Math.PI / 180.0;
var La2 = la2 * Math.PI / 180.0;
var La3 = La1 - La2;
var Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0;
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)));
s = s * 6378.137;
s = Math.round(s * 10000) / 10000;
s = s.toFixed(2);
return s;
}
判断环境(web-view)
export function isMiniProgram() {
var ua = navigator.userAgent.toLowerCase()
var envType = '#'
if (ua.match(/MicroMessenge/i) == 'micromessenger') {
wx.miniProgram.getEnv(function(res) {
if (res.miniProgram) { // 小程序环境下逻辑
envType = true
} else { // 非小程序环境下逻辑
envType = false
}
})
} else { // 非微信环境逻辑
envType = false
}
return envType
}
格式时间
export function formatDate(date, fmt) {
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
}
const o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds()
}
for (const k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
const str = o[k] + ''
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
}
}
return fmt
}
function padLeftZero(str) {
return ('00' + str).substr(str.length)
}
使用中
filters: { formatDate(time) { const date = new Date(time) return formatDate(date, 'yyyy-MM-dd hh:mm') } },
{{ item | formatDate}}