Javascript常用方法备份

        本文仅作常用Javascript方法备份,部分可能采用typescript写法。

1、小驼峰格式转换

        许多后端语言都习惯采用大驼峰命名方式,而前端代码多采用小驼峰方式,此时就需要在收到后端数据后进行格式的转换。转换思路就是根据原数据的数据类型进行循环递归转换。如果是数组,则对每个数组元素分别转换后返回新的数组;如果是对象,则遍历对象的属性origKey,将第一个字符调用toLowerCase()换为小写,生成新的属性newKey,用所有newKey和对应原来的值 value组成新的对象,最后返回新的对象。转换代码如下:

export class CamelCaseHelper {
    static toCamel(o) {
        let newO, origKey, newKey, value
        if (o instanceof Array) {
            return o.map((value) => {
                if (typeof value === "object") {
                    value = CamelCaseHelper.toCamel(value)
                }
                return value
            })
        } else {
            newO = {}
            for (origKey in o) {
                if (o.hasOwnProperty(origKey)) {
                    newKey = (origKey.charAt(0).toLowerCase() + origKey.slice(1) || origKey).toString()
                    value = o[origKey]
                    if (value instanceof Array || (value !== null && value.constructor === Object)) {
                        value = CamelCaseHelper.toCamel(value)
                    }
                    newO[newKey] = value
                }
            }
        }
        return newO
    }
}

2、对象克隆

        在很多不希望修改到源数据的地方会使用到克隆方法。克隆的思路也是根据源数据的类型,遍历全部字段除了值类型外,其他字段都进行递归调用设置为克隆的值。方法可设置克隆深度depth,递归depth过后,超过深度的属性字段就不再克隆,直接进行引用赋值操作。默认depth为-1,即不限制深度,全部进行克隆。代码如下:

  /**
   * 对象克隆
   * @param src 源对象
   * @param depth  克隆深度  默认无线大 
   * @returns 克隆对象
   */
  clone(src: any, depth: number = -1): any {
    let ret: any;
    if (typeof src == "object") {
      if (src === null) {
        ret = null;
      } else {
        if (src instanceof Array) {
          ret = src.map(a => { return clone(a, depth); });
        } else {
          if (src instanceof Date) {
            ret = src;
          } else {
            depth--;
            ret = {};
            if (depth == -1) {
              for (let j in src) {
                ret[j] = clone(src[j]);
              }
            } else {
              if (depth == 0) {
                ret = src;
              } else {
                for (let j in src) {
                  ret[j] = clone(src[j], depth);
                }
              }
            }
          }
        }
      }
    } else {
      ret = src;
    }
    return ret;
  }

3、日期格式化

       将日期按照期望格式转换为字符串,方法采用正则匹配替换的方式完成日期到模板字符串的转换。代码如下:

  /**
   * 格式化显示日期时间 
   * @param date 日期对象
   * @param format 模板(sample "yyyy-MM-dd HH:mm:ss SSS") 
   */
  dateFormat(date: Date, format: string) {
    let o: any = {
      "M+": date.getMonth() + 1,                 //月份   
      "d+": date.getDate(),                    //日   
      "H+": date.getHours(),                   //小时   
      "m+": date.getMinutes(),                 //分   
      "s+": date.getSeconds(),                 //秒   
      "S": date.getMilliseconds()             //毫秒   
    };
    if (/(y+)/.test(format))
      format = format.replace(RegExp.$1, (date.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;
  }

4、字符串长度截取  

        很多时候为了保证字符长度不超过容器宽度,需要将字符串进行截取,此时就需要用到截取方法,对超过的部分用指定字符替换。方法须传入想要截取的长度length,未传入length则不会对字符串进行截断,传入suffix字符串作为返回的字符串的结尾。代码如下:

  /**
   * 字符串长度截取  
   * @param value 源数据
   * @param length 限定的字符串长度
   * @param suffix 附加到尾部的字符串
   * @returns 实际显示的字符串
   */
  stringEllipsis(src: any, length?: number, suffix: string = '...'): any {
    if (typeof src !== 'string') {
      return src;
    }
    const len = typeof length === 'undefined' ? src.length : length;
    if (src.length <= len) {
      return src;
    }
    return src.substring(0, len) + suffix;
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_老杨_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值