【函数】各种函数收集,持续更新~

文章目录

    • 各种函数收集,持续更新~
      • 1. 数组对象去重
      • 2. 时间转换函数
      • 3. 深拷贝
      • 4. js精度问题解决(加减乘除)
      • 5. toFiexed函数重写
      • 6.手机号校验与隐藏手机号中间4位
      • 7. 身份证号校验与加密+校验位检测+15位转18位身份证
      • 8. 千位符格式化(123,456)

各种函数收集,持续更新~

1. 数组对象去重

使用reduce,自己看着改

let arr = [{id: 1, name: '周瑜'},{id: 3, name: '王昭君'},{id: 2, name: '亚瑟'},{id: 1, name: '小乔'},{id: 2, name: '大桥'},{id: 3, name: '韩信'}
];
let obj = {}
arr = arr.reduce((preVal,curVal) => {obj[curVal.id] ? "" : obj[curVal.id] = preVal.push(curVal)return preVal},[])
console.log(arr)

2. 时间转换函数

第一个参数是输入的时间,标准格式或时间戳格式都可

第二个参数是输出的样子,要啥写啥样,全部是这样 ‘yyyy-MM-dd hh:mm:ss’

export function formatDate(t, format='yyyy-MM-dd') {if(t==''||t<=0||t==null||t=='null'){return '';}if(typeof t == 'string'){t = t.replace(new RegExp(/-/gm) ,"/");}const d = new Date(t);const o = {"M+" : d.getMonth() + 1,// month"d+" : d.getDate(),// day"h+" : d.getHours(),// hour"m+" : d.getMinutes(),// minute"s+" : d.getSeconds(),// second"q+" : Math.floor((d.getMonth() + 3) / 3),// quarter"S" : d.getMilliseconds()// millisecond};if (/(y+)/.test(format) || /(Y+)/.test(format)) {format = format.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length));}for ( let k in o) {if (new RegExp("(" + k + ")").test(format)) {format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]: ("00" + o[k]).substr(("" + o[k]).length));}}return format;
}

获取当前时间的上个月

export function getLastMonth() {//获取上个月日期const date = new Date();let year = date.getFullYear();let month = date.getMonth();if (month == 0) {year = year - 1;month = 12;}month = (month + "").length == 1 ? "0" + month : monthreturn year + "-" + month;
}

3. 深拷贝

export function deepClone(source) {if (!source && typeof source !== 'object') {throw new Error('error arguments', 'deepClone')}const targetObj = source.constructor === Array ? [] : {}Object.keys(source).forEach(keys => {if (source[keys] && typeof source[keys] === 'object') {targetObj[keys] = deepClone(source[keys])} else {targetObj[keys] = source[keys]}})return targetObj
}

4. js精度问题解决(加减乘除)

export function accAdd(arg1, arg2) {let r1, r2, m, c;try {r1 = arg1.toString().split(".")[1].length;}catch (e) {r1 = 0;}try {r2 = arg2.toString().split(".")[1].length;}catch (e) {r2 = 0;}c = Math.abs(r1 - r2);m = Math.pow(10, Math.max(r1, r2));if (c > 0) {const cm = Math.pow(10, c);if (r1 > r2) {arg1 = Number(arg1.toString().replace(".", ""));arg2 = Number(arg2.toString().replace(".", "")) * cm;} else {arg1 = Number(arg1.toString().replace(".", "")) * cm;arg2 = Number(arg2.toString().replace(".", ""));}} else {arg1 = Number(arg1.toString().replace(".", ""));arg2 = Number(arg2.toString().replace(".", ""));}return (arg1 + arg2) / m;
}

跟上面加法配合用

export function accSub(arg1, arg2) {return accAdd(arg1, -arg2);
}

export function accMul(arg1,arg2) {let m=0,s1=arg1.toString(),s2=arg2.toString();try{m+=s1.split(".")[1].length}catch(e){}try{m+=s2.split(".")[1].length}catch(e){}return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
}

export function accDiv(arg1, arg2) {let t1 = 0, t2 = 0, r1, r2;try {t1 = arg1.toString().split(".")[1].length;} catch (e) {}try {t2 = arg2.toString().split(".")[1].length;} catch (e) {}r1 = Number(arg1.toString().replace(".", ""));r2 = Number(arg2.toString().replace(".", ""));return (r1 / r2) * Math.pow(10, t2 - t1);
}

5. toFiexed函数重写

重写原因:toFixed的四舍五入规则有问题,是四舍六入五成双,解决办法重写

Number.prototype.toFixed = function (n) {if (n > 20 || n < 0) {throw new RangeError('toFixed() digits argument must be between 0 and 20');}const number = this;if (isNaN(number) || number >= Math.pow(10, 21)) {return number.toString();}if (typeof (n) == 'undefined' || n == 0) {return (Math.round(number)).toString();}// 判断是正数还是负数let isPositive = true;if(parseFloat(number)<0){isPositive = false;}let result = number.toString();// 增加判断科学计数法的支持(只处理绝对值小于1的小数科学技术法)if(result.indexOf("e")>0&&Math.abs(number)<1){result =  scienceToString(number);}const arr = result.split('.');// 整数的情况if (arr.length < 2) {result += '.';for (let i = 0; i < n; i += 1) {result += '0';}return result;}const integer = arr[0];const decimal = arr[1];if (decimal.length == n) {return result;}if (decimal.length < n) {for (let i = 0; i < n - decimal.length; i += 1) {result += '0';}return result;}result = integer + '.' + decimal.substr(0, n);const last = decimal.substr(n, 1);// 四舍五入,转换为整数再处理,避免浮点数精度的损失if (parseInt(last, 10) >= 5) {const x = Math.pow(10, n);if(isPositive){result = (Math.round((parseFloat(result) * x)) + 1) / x;} else {result = (Math.round((parseFloat(result) * x)) - 1) / x;}result = result.toFixed(n);}return result;
};

6.手机号校验与隐藏手机号中间4位

//这个函数是先判断传入的是否是手机号function isMobile(mobileNumber){var reg = /^((1[3456789]{1}[0-9]{1})+\d{8})$/;// var reg = /^[1][3,4,5,7,8][0-9]{9}$/;return reg.test(mobileNumber);
}
//然后再隐藏手机号中间4位function hideMobile(mobileNumber, mode) {if(mode == 'visible'){return mobileNumber;}if(!mobileNumber){return '';}//判断非空if(isMobile(mobileNumber)){//判断是否是手机号var reg = /^(\d{3})\d{4}(\d{4})$/;//手机加密return mobileNumber.replace(reg, "$1****$2");}else{if(mobileNumber.length>=7){//固话加密return mobileNumber.substr(0,mobileNumber.length-2)+"**";}return mobileNumber;}
}

7. 身份证号校验与加密+校验位检测+15位转18位身份证

//身份证号加密
export function hideIdCard(idCardNumber, mode) {if(mode == 'visible'){return idCardNumber;}if(!idCardNumber){return '';}//判断非空if(checkCertificateNo(idCardNumber)){//判断是否是身份证号return idCardNumber.substring(0,3)+"****";   //身份证加密}
}
//身份证号的验证
export function checkCertificateNo(num) {let len = num.length, re;if (len == 15)re = new RegExp(/^([0-9]{6})()?([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{3})$/);else if (len == 18)re = new RegExp(/^([0-9]{6})()?([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{3})([0-9Xx])$/);else {//alert("请输入15或18位身份证号,您输入的是 "+len+ "位");return false;}let a = num.match(re);if (a != null) {if (len == 15) {var D = new Date("19" + a[3] + "/" + a[4] + "/" + a[5]);var B = D.getYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5];} else {var D = new Date(a[3] + "/" + a[4] + "/" + a[5]);var B = D.getFullYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5];}if (!B) {//alert("输入的身份证号 "+ a[0] +" 里出生日期不对!");return false;}} else {return false;}// 验证最后一位的校验位if(checkParity(num) === false){return false;}return true;
}//校验位的检测
const checkParity = function(obj)
{//15位转18位obj = changeFivteenToEighteen(obj);var len = obj.length;if(len == '18'){var arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];var arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];var cardTemp = 0, i, valnum;for(i = 0; i < 17; i ++){cardTemp += obj.substr(i, 1) * arrInt[i];}valnum = arrCh[cardTemp % 11];if (valnum == obj.substr(17, 1)){return true;}return false;}return false;
};//15位转18位身份证号
const changeFivteenToEighteen = function(obj)
{if(obj.length == '15'){var arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];var arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];var cardTemp = 0, i;obj = obj.substr(0, 6) + '19' + obj.substr(6, obj.length - 6);for(i = 0; i < 17; i ++){cardTemp += obj.substr(i, 1) * arrInt[i];}obj += arrCh[cardTemp % 11];return obj;}return obj;
};

8. 千位符格式化(123,456)

export function milliFormat(num) {return num && num.toString().replace(/\d+/, function(s){return s.replace(/(\d)(?=(\d{3})+$)/g, '$1,')})
}

千位符格式化且可以保留两位小数

export function formatter(number) {if(number) {return String(number).replace(/\B(?=(\d{3})+(?!\d))/g, ',')} else {return '0.00'}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

anaconda中安装pytorch和TensorFlow环境并在不同环境中安装kernel

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

单链表的实现

CSDN主页&#xff1a;醋溜马桶圈_C语言进阶,初始C语言,数据结构-CSDN博客 Gitee主页&#xff1a;mnxcc (mnxcc) - Gitee.com 专栏&#xff1a;数据结构_醋溜马桶圈的博客-CSDN博客 目录 1.认识单链表 2.创建单链表 3.单链表的操作 3.1打印单链表 3.2开辟新空间 3.3尾插 3.4头插…

深入探讨Linux中的文本文件查看命令

目录 前言1 cat命令2 less命令3 more命令4 head命令5 tail命令6 总结 前言 在Linux系统中&#xff0c;文本文件是日常工作中不可或缺的一部分&#xff0c;无论是配置文件、日志文件还是代码文件&#xff0c;都需要用到文本文件查看命令。在本文中&#xff0c;我们将深入研究一…

AI创作系统ChatGPT源码+AI绘画系统+支持OpenAI DALL-E3文生图,可直接对话文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。新增支…

桶装水订水小程序app,线上预约订水更便捷

桶装水订水小程序app&#xff0c;线上预约订水更便捷。设置好地址&#xff0c;一键订水&#xff0c;工作人员送水到家。还能配送新鲜果蔬&#xff0c;绿色健康有保证。送水软件手机版&#xff0c;提供各种品牌桶装水&#xff0c;在线发起订水服务&#xff0c;由服务人员送水到家…

QT windows与linux之间sokcet通信中文乱码问题解决方法

QT windows与linux之间sokcet通信中文乱码问题解决方法 linux发送与接收都转码utf-8: tcpClient ->write( send_msg.toUtf8());//解决乱码&#xff0c;发送转码 接收&#xff1a; QByteArray buffer tcpClient->readAll(); if(!buffer.isEmpty()) { // ui->plain…

ipad可能会在iOS 16中失去智能家居中心功能

在iOS 16测试版代码中发现的文本表明苹果将放弃对iPad家庭中心的支持 家庭app迎来重大改版&#xff0c;未来更将对智能家居互联互通标准Matter提供支持。 即使某一款智能家居设备再优秀&#xff0c;只要它没有接入HomeKit&#xff0c;那么就不能在苹果的家庭app中直接管理控制。…

双十一买高画质投影仪,当贝F6还是极米H6?

如果你想购买一台4K画质的投影仪,那么在各大平台搜索“双十一最值得买的4K投影仪”时,一定会注意到当贝F6和极米H6这两个型号投影仪。个人认为当贝F6和极米H6都分别是当贝和极米两个品牌非常具有性价比的4K投影仪。那么到底哪一台更适合你。 首先放一张参数对比图,方便参数控研…

登上CMMLU性能评测榜单第一 四大维度解码夸克自研大模型

11月14日&#xff0c;拥有千亿参数的夸克自研大模型正式发布&#xff0c;立刻占据CMMLU榜单第一名。夸克大模型将应用于通用搜索、医疗健康、教育学习、职场办公等多个场景。性能方面&#xff0c;其整体水平已经超过GPT-3.5&#xff0c;其中在写作、考试等部分场景中可以超过GP…

OpenCV实现手势虚拟拖拽

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用OpenCV实现手势虚拟拖拽&#xff0c;欢迎大家一起前来探讨学习~ 一、主要步骤及库的功能介绍 1.主要步骤 要实现本次实验&#xff0c;主要步骤如下&#xff1a; 导入OpenCV库。通过OpenCV读取摄…

解决element的el-input无法输入问题

el-inputmaxlength"5"placeholder"请输入年龄"v-model"addValue.age"input"changeMessage"onkeyup"this.valuethis.value.replace(/^0/g, ).replace(/[^0-9]/g, )" > </el-input>changeMessage(){//强制刷新或者使…

做决策、定战略、带团队:顶级高手常用的16个思维模型

01 做决策 1.沃伦巴菲特的双目标清单系统&#xff08;Two-List System&#xff09; 弗林特当了巴菲特的私人飞行员十年之久&#xff0c;还曾为美国四任总统开过飞机&#xff0c;但他在事业上依然有更多追求。有一次&#xff0c;他和巴菲特在探讨他的职业生涯目标时&#xff0…

Node.js中的Buffer和Stream

Node.js中的Buffer和Stream 计算机只能理解二进制数据&#xff0c;即0和1形式的数据。这些数据的顺序移动称为流。以称为块&#xff08;chunk&#xff09;的破碎部分流式传输数据&#xff1b;计算机一收到数据块就开始处理数据&#xff0c;而不用等待整个数据。 我们这篇文章…

python类接口和抽象超类

1 python类接口和抽象超类 1.1 导入模块执行class语句 python导入模块时会执行class语句及主体内的顶层语句。 示例 # test.py class MyClass:print(MyClass) # cmd执行下面语句 E:\documents\F盘>python >>> import test MyClass1.2 pytho类接口技术 python类…

容器化nacos部署并实现服务发现(gradle)

1.如何容器化部署mysql 2. 如何容器化部署nacos 为不暴露我的服务器地址&#xff0c;本文全部使用localhost来代替服务器地址&#xff0c;所有的localhost都应该调整为你自己的服务器地址。 为不暴露我的服务器地址&#xff0c;本文全部使用localhost来代替服务器地址&#x…

台式电脑的IP地址在哪里?解密台式电脑网络连接的秘密!

​ 如今智能手机和便携式笔记本电脑盛行的时代&#xff0c;台式电脑似乎逐渐被人们所忽视。然而&#xff0c;对于需要高性能和大容量存储的用户来说&#xff0c;台式电脑依然是最好的选择。而作为一款能够连接网络的设备&#xff0c;台式电脑也有自己独特的IP地址。下面虎观代理…

我自己理解的JAVA反射

1.定义 JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性&#xff1b;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制…

Python之函数进阶-匿名函数

Python之函数进阶-匿名函数 匿名函数 匿名:隐藏名字&#xff0c;即没有名称匿名函数:没有名字的函数。Lambda表达式 Python中&#xff0c;使用Lambda表达式构建匿名函数。 使用lambda关键字定义匿名函数&#xff0c;格式为 lambda [参数列表]: 表达式参数列表不需要小括号。无…

Libra R-CNN: Towards Balanced Learning for Object Detection(2019.4)

文章目录 AbstractIntroduction引入问题1&#xff09; Sample level imbalance2) Feature level imbalance3) Objective level imbalance进行解决贡献 Related Work&#xff08;他人的work&#xff0c;捎带与我们的对比&#xff09;Model architectures for object detection&a…

每日一练 | 华为认证真题练习Day130

1、一台AR2200各由器需要恢复初始配置&#xff0c;则下面哪些描述是正确的&#xff1f;&#xff08;多选&#xff09; A. 重新指定下次启动加载的配置文件 B. 重置saved configuration C. 清除current configuration D. 重启该AR2200路由器 2、管理员想要彻底删除旧的设备配…