实际项目中的通用函数封装(持续更新)
1.生成随机数
export const randomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
2.数组操作
2.1 数组扁平化(多维数组转一维数组)
1 | export const flatten = function (arr){ return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])}; |
2.2 获取数组中的随机项
export const sample = arr => arr[Math.floor(Math.random() * arr.length)];
3.字符串操作
3.1 生成随机字符串
export const randomString = (len) => { let chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz123456789'; let strLen = chars.length; let randomStr = ''; for (let i = 0; i < len; i++) { randomStr += chars.charAt(Math.floor(Math.random() * strLen)); } return randomStr; };
3.2 手机中间四位变*(手机隐藏处理)
export const telFormat = (tel) => { tel = String(tel); return tel.substr(0,3) + "****" + tel.substr(7); };
4 格式转化
4.1 日期格式化
function parseTime(time, pattern) { if (arguments.length === 0 || !time) { return null } const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' let date if (typeof time === 'object') { date = time } else { if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { time = parseInt(time) } else if (typeof time === 'string') { time = time.replace(new RegExp(/-/gm), '/'); } if ((typeof time === 'number') && (time.toString().length === 10)) { time = time * 1000 } date = new Date(time) } const formatObj = { y: date.getFullYear(), m: date.getMonth() + 1, d: date.getDate(), h: date.getHours(), i: date.getMinutes(), s: date.getSeconds(), a: date.getDay() } const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { let value = formatObj[key] // Note: getDay() returns 0 on Sunday if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } if (result.length > 0 && value < 10) { value = '0' + value } return value || 0 }) return time_str } parseTime(new Date(),'{y}-{m}-{d} {h}:{i}:{s}') // '2022-01-05 16:13:17'
4.2 数字转化为大写金额
export const digitUppercase = (n) => { const fraction = ['角', '分']; const digit = [ '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' ]; const unit = [ ['元', '万', '亿'], ['', '拾', '佰', '仟'] ]; n = Math.abs(n); let s = ''; for (let i = 0; i < fraction.length; i++) { s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, ''); } s = s || '整'; n = Math.floor(n); for (let i = 0; i < unit[0].length && n > 0; i++) { let p = ''; for (let j = 0; j < unit[1].length && n > 0; j++) { p = digit[n % 10] + unit[1][j] + p; n = Math.floor(n / 10); } s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s; } return s.replace(/(零.)*零元/, '元') .replace(/(零.)+/g, '零') .replace(/^整$/, '零元整'); };
4.3 数字转化为中文数字
export const intToChinese = (value) => { const str = String(value); const len = str.length-1; const idxs = ['','十','百','千','万','十','百','千','亿','十','百','千','万','十','百','千','亿']; const num = ['零','一','二','三','四','五','六','七','八','九']; return str.replace(/([1-9]|0+)/g, ( $, $1, idx, full) => { let pos = 0; if($1[0] !== '0'){ pos = len-idx; if(idx == 0 && $1[0] == 1 && idxs[len-idx] == '十'){ return idxs[len-idx]; } return num[$1[0]] + idxs[len-idx]; } else { let left = len - idx; let right = len - idx + $1.length; if(Math.floor(right / 4) - Math.floor(left / 4) > 0){ pos = left - left % 4; } if( pos ){ return idxs[pos] + num[$1[0]]; } else if( idx + $1.length >= len ){ return ''; }else { return num[$1[0]] } } }); }
5.js操作
5.1 深拷贝
5.2 数据类型判断
export const objecType= (obj)=>{ return Obj.prototype.toString.call(obj).slice(8,-1).toLowerCase()};
5.3 获取特殊日期
export nowTime = (pattern)=> { // 获取当前时间 var now = new Date() var year = now.getFullYear() // 年 var month = now.getMonth() + 1 // 月 var lastMonth = now.getMonth() // 上月 var day = now.getDate() // 日 var hh = now.getHours() // 时 var mm = now.getMinutes() // 分 var ss = now.getSeconds() // 秒 if (month < 10) { month = '0' + month } if (lastMonth < 10) { lastMonth = '0' + lastMonth } if (day < 10) { day = '0' + day } if (hh < 10) { hh = '0' + hh } if (mm < 10) { mm = '0' + mm } if (ss < 10) { ss = '0' + ss } if (pattern === 'time') { return hh + ':' + mm + ':' + ss // 获取当前时间 } else if (pattern === 'year') { return year // 获取当前年份 } else if (pattern === 'month') { return month // 获取当前月份 } else if (pattern === 'day') { return day // 获取当前月份 } else if (pattern === 'yearMonth') { return year + '-' + month // 获取当前月份 } else if (pattern === 'YM') { return year + '-' + lastMonth // 获取当年上月 } else if (pattern === 'date') { return year + '-' + month + '-' + day // 获取当前日期 } else if (pattern === 'yesdate') { return year + '-' + month + '-' + (day-1) // 获取昨天日期 } else if (pattern === 'allTime') { return year + month + day + hh + mm + ss // 获取日期与时间 } }
5.4 防抖
export function debounce(func, wait, immediate) { let timeout, args, context, timestamp, result const later = function() { // 据上一次触发时间间隔 const last = +new Date() - timestamp // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait if (last < wait && last > 0) { timeout = setTimeout(later, wait - last) } else { timeout = null // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 if (!immediate) { result = func.apply(context, args) if (!timeout) context = args = null } } } return function(...args) { context = this timestamp = +new Date() const callNow = immediate && !timeout // 如果延时不存在,重新设定延时 if (!timeout) timeout = setTimeout(later, wait) if (callNow) { result = func.apply(context, args) context = args = null } return result } }
5.5 节流
6.判断对象是否为空
const isEmpty = obj => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)