js封装api接口(一些好用的javascript/typescript方法封装分享)
导读:1、数字格式化 JS版-直接写到原型链上 /** * @author: silencetea *...
1 、数字格式化
JS版-直接写到原型链上 /** * @author: silencetea * @name: * @description: 数字格式化 ,默认每三位用英文逗号分隔 * @param {number} number 要格式化的数字 * @param {number} decimals 保留几位小数 ,默认不保留小数 * @param {string} dec_point 小数点符号,默认“. ” * @param {string} thousands_sep 千分位符号 ,默认英文逗号 * @return {*} */ Number.Format = (number, decimals, dec_point, thousands_sep) => { number = (number + "").replace(/[^0-9+-Ee.]/g, ""); let n = !isFinite(+number) ? 0 : +number, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = typeof thousands_sep === "undefined" ? "," : thousands_sep, dec = typeof dec_point === "undefined" ? "." : dec_point, s = "", toFixedFix = function (n, prec) { let k = Math.pow(10, prec); return "" + Math.ceil(n * k) / k; }; s = (prec ? toFixedFix(n, prec) : "" + Math.round(n)).split("."); let re = /(-?\d+)(\d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, "$1" + sep + "$2"); } // 小数点后位数不够补0 ,需要补0 ,放开下方被注释的代码即可 // if ((s[1] || "").length < prec) { // s[1] = s[1] || ""; // s[1] += new Array(prec - s[1].length + 1).join("0"); // } return s.join(dec); }; JS版-封装方法 /** * @author: silencetea * @name: numberFormat * @description: 数字格式化 ,默认每三位用英文逗号分隔 * @param {number} number 要格式化的数字 * @param {number} decimals 保留几位小数 ,默认不保留小数 * @param {string} dec_point 小数点符号 ,默认“. ” * @param {string} thousands_sep 千分位符号 ,默认英文逗号 * @return {*} */ const numberFormat = ( number, decimals = 0, dec_point = ., thousands_sep = ,, ) => { let numberStr = (number + ).replace(/[^0-9+-Ee.]/g, ); let n = !isFinite(+numberStr) ? 0 : +numberStr, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = typeof thousands_sep === undefined ? , : thousands_sep, dec = typeof dec_point === undefined ? . : dec_point, s, toFixedFix = function (n, prec) { let k = Math.pow(10, prec); return + Math.ceil(n * k) / k; }; s = (prec ? toFixedFix(n, prec) : + Math.round(n)).split(.); let re = /(-?\d+)(\d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, $1 + sep + $2); } // 小数点后位数不够补0 ,不需要补0可以注释掉 if ((s[1] || ).length < prec) { s[1] = s[1] || ; s[1] += new Array(prec - s[1].length + 1).join(0); } return s.join(dec); }; TS版-封装方法 /** * @author: silencetea * @name: numberFormat * @description: 数字格式化 ,默认每三位用英文逗号分隔 * @param {number} number 要格式化的数字 * @param {number} decimals 保留几位小数,默认不保留小数 * @param {string} dec_point 小数点符号 ,默认“. ” * @param {string} thousands_sep 千分位符号 ,默认英文逗号 * @return {*} */ const numberFormat = ( number: number, decimals: number = 0, dec_point: string = ., thousands_sep: string = ,, ) => { let numberStr = (number + ).replace(/[^0-9+-Ee.]/g, ); let n = !isFinite(+numberStr) ? 0 : +numberStr, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = typeof thousands_sep === undefined ? , : thousands_sep, dec = typeof dec_point === undefined ? . : dec_point, s, toFixedFix = function (n: number, prec: number) { let k = Math.pow(10, prec); return + Math.ceil(n * k) / k; }; s = (prec ? toFixedFix(n, prec) : + Math.round(n)).split(.); let re = /(-?\d+)(\d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, $1 + sep + $2); } if ((s[1] || ).length < prec) { s[1] = s[1] || ; s[1] += new Array(prec - s[1].length + 1).join(0); } return s.join(dec); };2 、字节进级换算
JS版-封装方法 /** * @author: silencetea * @name: * @description: 字节进级换算 * @param {number} number 要换算的数字 * @param {string} unit 数字单位,默认KB * @param {number} lev 数字超过多少位进行换算 ,默认5 * @param {Array<string>} sizes 数组 ,进位的各级单位 * @return {*} */ Number.GBToSize = (number, unit=KB, lev = 5, sizes = ["KB", "MB" ,"GB", "TB", "PB", "EB", "ZB", "YB"]) => { if (typeof number !== number) { return {}; } let num = number, i = sizes.indexOf(unit); while (num.toString().split(.)[0].length > lev) { num = Math.round(num / 1024); i++; } return { num: num, unit: sizes[i], }; };3 、个 、万 、十万等换算
JS版-封装方法 /** * @author: silencetea * @name: orderOfMagnitudeConversion * @description: 个 、万 、十万等换算 * @return {*} * @param {number} number 要换算的数字 * @param {string} unit 传入的数字单位,默认无 ,即“个 ” */ const orderOfMagnitudeConversion = ( number, unit = ) => { let k = [1, 10000, 1000], sizes = [, 万, 千万], num = number, i = sizes.indexOf(unit); while ((num.toString() + sizes[i]).length > 6) { if (i >= k.length - 1) { // console.log("break", num.toString() + sizes[i]) break; } else { i++; num = Math.round(num / k[i]); } } return { num: numberFormat(num), unit: sizes[i] }; };4 、数字数组排序 ,默认从小到大
TS版-封装方法 /** * @author: silencetea * @name: sortNumberArray * @description: 数字数组排序 ,默认升序:从小到大 * @param {Array<number>} data * @param {string} sortType 排序方式 ,asc升序 ,desc降序 * @return {*} */ const sortNumberArray = ( data: Array<number>, sortType: string = "asc" ) => { if (sortType === "asc") { data.sort((x: number, y: number) => { return x - y; }); } else if (sortType === "desc") { data.sort((x: number, y: number) => { return y - x; }); } return data; };5 、日期格式化 ,调用方式 ,new Date(datevalue).Format(yyyy-MM-dd HH:mm:ss) ,或者new Date().Format(yyyy-MM-dd)
JS版-直接写到原型链上 /** * @author: silencetea * @name: sortNumberArray * @description: 数字数组排序 ,默认升序:从小到大 * @param {any} fmt 要以何种格式格式化 * @return {*} */ Date.prototype.Format = (fmt) => { let o = { M+: this.getMonth() + 1, d+: this.getDate(), H+: this.getHours(), m+: this.getMinutes(), s+: this.getSeconds(), S+: this.getMilliseconds() }; //因为date.getFullYear()出来的结果是number类型的,所以为了让结果变成字符串型,下面有两种方法: if (/(y+)/.test(fmt)) { //第一种:利用字符串连接符“+ ”给date.getFullYear()+ ,加一个空字符串便可以将number类型转换成字符串 。 fmt = fmt.replace(RegExp.$1, (this.getFullYear() + ).substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp(( + k + )).test(fmt)) { //第二种:使用String()类型进行强制数据类型转换String(date.getFullYear()) ,这种更容易理解 。 fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((00 + o[k]).substr(String(o[k]).length))); } } return fmt; }; TS版-封装方法 /** * @author: silencetea * @name: sortNumberArray * @description: 数字数组排序,默认升序:从小到大 * @param {any} fmt 要以何种格式格式化 * @param {any} datetime 要格式化的日期时间 * @return {*} */ const datetimeFormat = (fmt: any, datetime?:any) => { let _this = datetime ? new Date(datetime) : new Date(); let o:any = { M+: _this.getMonth() + 1, d+: _this.getDate(), H+: _this.getHours(), m+: _this.getMinutes(), s+: _this.getSeconds(), S+: _this.getMilliseconds() }; //因为date.getFullYear()出来的结果是number类型的,所以为了让结果变成字符串型 ,下面有两种方法: if (/(y+)/.test(fmt)) { //第一种:利用字符串连接符“+ ”给date.getFullYear()+ ,加一个空字符串便可以将number类型转换成字符串。 fmt = fmt.replace(RegExp.$1, (_this.getFullYear() + ).substr(4 - RegExp.$1.length)); } for (let k in o) { if (new RegExp(( + k + )).test(fmt)) { //第二种:使用String()类型进行强制数据类型转换String(date.getFullYear()),这种更容易理解 。 fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((00 + o[k]).substr(String(o[k]).length))); } } return fmt; };本文链接:https://www.cnblogs.com/xsilence/p/16382118.html
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!