1.日期事件格式化在tools文件内部(几分钟后的时间,格式化方式)
// 1.日期事件格式化在tools文件内部(几分钟后的时间,格式化方式)export const lastformartTime = (time, rule = 'yyyy-mm-dd hh:mm:ss') => {let date = new Date();let min = date.getMinutes();date.setMinutes(min + time);let getYear = date.getFullYear().toString();let getMonth = (date.getMonth() + 1).toString().padStart(2, '0');let getDate = date.getDate().toString().padStart(2, '0');let getHours = date.getHours().toString().padStart(2, '0');let getMinutes = date.getMinutes().toString().padStart(2, '0');let getSeconds = date.getSeconds().toString().padStart(2, '0');if (rule == 'yyyy-mm-dd hh:mm:ss') {return `${getYear}-${getMonth}-${getDate} ${getHours}:${getMinutes}:${getSeconds}`} else if (rule == 'yyyy-mm-dd') {return `${getYear}-${getMonth}-${getDate}`}}// 使用import { lastformartTime } from "../../libs/tools";lastformartTime(5)
2.获取url参数
// 2.获取url参数export const getUrlParams = () => {let url = decodeURI(window.location.hash);let urlParams = new Object();if (url.indexOf("?") != -1) {let str = url.substr(url.indexOf("?") + 1).split("&");for (let i = 0; i < str.length; i++) {urlParams[str[i].split("=")[0]] = unescape(str[i].split("=")[1]);}}return urlParams}
3.在js的prototype上定义方法
// 1.手机号码格式化为344String.prototype.phoneFormat = function () {var str = thisif (str.length == 0) {return str} else if ( str.length == 11) {str = str.substr(0, 3) + '-' + str.substr(3, 4) + '-' + str.substr(7, 4);}return str}// 使用时('18336916987').phoneFormat()// 2.金额按照万分位格式化String.prototype.priceFormat = function () {var str = thisreturn (str).replace(/(\d{1,4})(?=(\d{4})+(?:$|\.))/g,'$1,');}(price+'').priceFormat()
// 取整, 使用按位运算符function toInt(num) {return num | 0}console.log(toInt(1.8)) // 1console.log(toInt(1.23232)) // 1// 取整 (位运算花样取整)~~(-5.88) // -5// 判断奇偶return number & 1 === 1// 交换两个变量的值(不用第三个变量)let a = 1,b = 2;a = a ^ b;b = a ^ b; // 1a = a ^ b; // 2/*** 压缩图片* @param file 图片文件* @param callback 回调函数,压缩完要做的事,例如ajax请求等。*/compressFile(file, callback) {let fileObj = file;let reader = new FileReader();reader.readAsDataURL(fileObj); //转base64reader.onload = function (e) {let image = new Image(); //新建一个img标签(还没嵌入DOM节点)image.src = e.target.result;image.onload = function () {let canvas = document.createElement("canvas"), // 新建canvascontext = canvas.getContext("2d"),imageWidth = image.width / 4, //压缩后图片高度和宽度imageHeight = image.height / 5,data = "";canvas.width = imageWidth;canvas.height = imageHeight;context.drawImage(image, 0, 0, imageWidth, imageHeight);data = canvas.toDataURL("image/jpeg", 0.1); // 0.1压缩至以前的0.1倍let arr = data.split(","),mime = arr[0].match(/:(.*?);/)[1], // 转成blobbstr = atob(arr[1]),n = bstr.length,u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}let files = new window.File([new Blob([u8arr], { type: mime })],"test.jpeg",{ type: "image/jpeg" }); // 转成filecallback(files); // 回调};};},/*** dataURL转file* @param {*} dataUrl* @param {String} filename 文件名* @param {String} filetype 文件类型*/export const dataURLtoFile = (dataUrl, filename, filetype = 'image/jpeg') => {// 获取到base64编码const arr = dataUrl.split(',');// 将base64编码转为字符串const bstr = window.atob(arr[1]);let n = bstr.length;const u8arr = new Uint8Array(n); // 创建初始化为0的,包含length个元素的无符号整型数组while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], filename, {type: filetype,});};/*** 拷贝数据* @param {}*/// 定义一个深拷贝函数 接收目标target参数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]))}// 判断如果当前的值是null的话;直接赋值为null} 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;}/**** @param {Bold} img 图片流* @param {Function} callback 回调*/export function getBase64(img, callback) {const reader = new FileReader();reader.addEventListener('load', () => callback(reader.result));reader.readAsDataURL(img);}/*** oss上传图片时转化为buffer* @param {bold} img 图片流* @returns {OSSBuffer} buffer对象*/export function readFileAsBuffer(file) {const reader = new FileReader();return new Promise((resolve) => {reader.readAsDataURL(file);reader.onload = function () {const base64File = reader.result.replace(/^data:\w+\/\w+;base64,/,"");resolve(new OSS.Buffer(base64File, "base64"));};});}/*** 创建一个带有过期时间的session* @param {String} key 设置localstorage的key* @param {String} value 设置localstorage的value*/export function setSession(key, value) {const curTime = Date.now();localStorage.setItem(key, JSON.stringify({ data: value, time: curTime }));}// 判断值是否为空export function isEmpty(type) {return [null, undefined, ""].includes(type);};/*** 函数节流* @param {Function} fn 执行函数* @param {Number} ms //倒计时时间*/export function debounce(fn, ms = 500) {let timeoutIdreturn function () {clearTimeout(timeoutId)timeoutId = setTimeout(() => {fn.apply(this, arguments)}, ms)}}/*** 根据key和过期时间获取session* @param {String} key 获取localstorage的key* @param {Number} exp localstorage 的过期时间* return {String} localstorage key 对应的值*/export function getSession(key, exp) {const data = localStorage.getItem(key);if (!data) {return '';}const dataObj = JSON.parse(data);if (!isEmpty(exp) && new Date().getTime() - dataObj.time > exp) {return '';}return dataObj.data;}/*** 删除一个session* @param {String} key*/export function destroySession(key) {localStorage.removeItem(key);}
4.判断数据类型
const isType = type => target => `[object ${type}]` === Object.prototype.toString.call(target)const isString = isType('String')const isNumber = isType('Number')const isSymbol = isType('Symbol')const isUndefined = isType('Undefined')const isNull = isType('Null')const isFunction = isType('Function')const isDate = isType('Date')const isArray = isType('Array')const isRegExp = isType('RegExp')const isError = isType('Error')const isHTMLDocument = isType('HTMLDocument')const isglobal = isType('global')
