工作中常用的工具类函数

工作中常常很多数据处理操作需要公用,于是抽离出来变为一个个函数,用起来很香,但是由于比较多,手写呢嫌麻烦,这就记一记,以便日后用时ctrl cv一把嗦。

大家都是面向百度编程(手动狗头),来来来,要就拿走


时间

时间戳转化为天时分,倒计时时可使用
说明: time为时间戳

const timeDef = end.getTime() - nowTime.getTime()
const dates = formatDuring(timeDef)
export function formatDuring(time: number | string): arrayData {
  const st = Number(time);
  const day = parseInt((st / (1000 * 3600 * 24)).toString());
  const hour = parseInt(((st % (1000 * 3600 * 24)) / (1000 * 3600)).toString())
  const minute = parseInt(((st % (1000 * 3600))/(1000 * 60)).toString())
  return [day,hour, minute]
}

时间转为年月日时分

//传入new Date()
export function convertTime(date: Date): string {
  let res = '';
  if(date.getFullYear()) {
    const y = date.getFullYear();
    const mo = date.getMonth() + 1 > 10 ? date.getMonth() + 1 : '0'+(date.getMonth()+1)
    const d = date.getDate();
    const h = date.getHours() > 10 ? date.getHours(): '0'+date.getHours();
    const m = date.getMinutes() > 10 ? date.getMinutes(): '0'+date.getMinutes();
    res = y+"/"+mo+"/"+d+" "+h+":"+m;
  }
  return res;
}

当前范围值直至多少天后(前)的值
说明: range前面给’-'返回多少天前,否则多少天后,Delimiter 分隔符

const dateRange = getDateTime("-" + 3);//返回三天前和现在的时间
export function getDateTime(range: string | number, Delimiter = "-"): arrayData {
  const date: string[] = [];
  const now = new Date();
  const rangeStr = range.toString();
  if(rangeStr.indexOf("-") === -1){
    date[0] = now.toLocaleDateString().replace(/\//g, Delimiter);
    date[1] = new Date(now.setDate(now.getDate() + Number(rangeStr)))
      .toLocaleDateString().replace(/\//g, Delimiter);
  }
  else {
    date[0] = new Date(now.setDate(now.getDate() - Number(rangeStr.split("-")[1])))
      .toLocaleDateString().replace(/\//g, Delimiter)
    date[1] = new Date().toLocaleDateString().replace(/\//g, Delimiter);
  }
  return date;
}

返回两个时间戳相差的天数

export function dateDiffs(start: string, end: string): number {
  const sTime = new Date(start).getTime(),
        eTime = new Date(end).getTime();
  if(sTime && eTime) {
    return Math.floor((eTime - sTime)/(1000*3600*24))
  }
  else {
    throw new Error("传入的日期格式错误")
  }
}

对象

深度克隆(仅支持数组对象等)

//深克隆
export function deepClone(target) {
  //判断拷贝的数据类型
  //初始化变量result 成为最终克隆的数据
  function checkedType(targets: objectData | arrayData): string {
    return Object.prototype.toString.call(targets).slice(8, -1)
  }
  let result, targetType: string = checkedType(target)

  if (targetType === 'Object') {
    result = {}
  } else if (targetType === 'Array') {
    result = [];
  } else {
    return target
  }
  //遍历目标数据
  for (let i in target) {
    let value = target[i]
    if (checkedType(value) === 'Object' ||
      checkedType(value) === 'Array') {
      result[i] = deepClone(value)
    } else {
      result[i] = value;
    }
  }
  return result
}

清空对象值

// 这个有点鸡肋
export function clearForm(obj: objectData): objectData {
  const object: objectData = new Object();
  for(let k in obj) {
    if(Object.prototype.toString.call(obj[k]) === '[object Object]')
      object[k] = {};
    else if(Object.prototype.toString.call(obj[k]) === '[object Array]')
      object[k] = [];
    else object[k] = "";
  }
  return object;
}

其他

去驼峰

const key: string = k.replace(/([A-Z])/g, '_$1').replace(/[-_\s]+/g, '_').toLowerCase();

驼峰化

const key: string = k.replace(/[-_\s]+(.)?/g, function(match,c) {
      return c? c.toUpperCase() : "";
    });

防抖:

export class Debounced {
  /**
   * @param func 需要包装的函数
   * @param delay 延迟时间,单位ms
   * @param immediate 是否默认执行一次(第一次不延迟)
   */
  public use = (func: Function, delay: number, immediate: boolean = false): Function => {
    let timer: number | undefined
    return ( ...args: any) => {
      if (immediate) {
        func.apply(this, args) // 确保引用函数的指向正确,并且函数的参数也不变
        immediate = false
        return
      }
      clearTimeout(timer)
      timer = setTimeout(() => {
        func.apply(this, args)
      }, delay)
    }
  }
}

xxx.vue
使用

private debouncedBySatus = new Debounced().use(this.getOrders, 1000, true);

// 用@click = “handleEvent”
private handleEvent(){
	//.....
  this.debouncedBySatus();
}

你可能感兴趣的:(工作点滴,javascript)