一些好用的javascript/typescript方法封装分享

  • 一些好用的javascript/typescript方法封装分享已关闭评论
  • 187 次浏览
  • A+
所属分类:Web前端
摘要

本文链接:https://www.cnblogs.com/xsilence/p/16382118.html


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