0
点赞
收藏
分享

微信扫一扫

项目中常用方法

林塬 2022-03-11 阅读 78

目录

一、数组-字符串转换方法

1、字符串或数字转换成数组

2、数组转换成字符串 

二、时间-常用转化方法 

1、禁止选择星期天

2、禁止日期选择区间

(1)开始日期使用

(2)结束日期使用

3、传入日期,返回指定格式的日期

4、传入日期,返回moment格式的日期

三、对象-常用转化方法

1、判断对象多层结构数据是否存在、 不存在返回undefined

2、判断对象1中的值在对象2中是否相等 相等返回 true, 如果有一个值不相等返回false, objNew中新加的字段不作处理, 只对objPrep中的字段作处理

四、数字-常用转化方法

1、判断指是否为空 空位false 不为空为true

2、输入正数限制,解析不出来返回undefined

3、数字改千位分割

4、千位字符串转正常数字

5、类组件专属方法change方法


一、数组-字符串转换方法

1、字符串或数字转换成数组

// 判断数据为字符串还是数字,并转换成数组
export function checkTypeBackArray(str: any, separa: string = ",") {
  if (str) {
    if (typeof str === "string" || typeof str === "number") {
      let bcValue = str.toString().split(separa);
      return bcValue;
    } else if (Object.prototype.toString.call(str) === "[object Array]") {
      return str;
    }
  } else {
    return [];
  }
}

2、数组转换成字符串 

// 判断数据为数组,并转换成字符串
export function checkTypeBackString(arr: any, separa: string = ",") {
  if (arr) {
    if (typeof arr === "string" || typeof arr === "number") {
      return arr;
    } else if (Object.prototype.toString.call(arr) === "[object Array]") {
      let bcValue = arr.join(separa);
      return bcValue;
    }
  } else {
    return "";
  }
}


二、时间-常用转化方法 

已moment.js为基础,使用前需要引入moment。 

1、禁止选择星期天

// 禁止选择星期天
export function disableDateWeek(e: object) {
  var weekOfday = moment(e).format("E");
  if (weekOfday === "6" || weekOfday === "7") {
    return true;
  } else {
    return false;
  }
}

2、禁止日期选择区间

(1)开始日期使用

<DatePicker
  disabledDate={e => commUtils.disabledStartDt(e, startDate, endDate)}
/>
// 禁止开始日期选择
export function disabledStartDt(e: any, startDt?: any, endDt?: any, disBeforeToday?: boolean, dtFormat: string = formatDate) {
  e = moment(e).format(dtFormat);
  if (e && typeof e == "string") {
    e = moment(e, dtFormat);
  }
  if (startDt && typeof startDt == "string") {
    startDt = moment(startDt, dtFormat);
  }
  if (endDt && typeof endDt == "string") {
    endDt = moment(endDt, dtFormat);
  }
  if (e && endDt) {
    if (disBeforeToday) {
      return e < moment().startOf("day") || e.valueOf() > endDt.valueOf();
    }
    return e.valueOf() > endDt.valueOf();
  } else if (e && disBeforeToday) {
    return e < moment().startOf("day");
  }
  return false;
}

(2)结束日期使用

<DatePicker
  disabledDate={e => commUtils.disabledEndDt(e, startDate, endDate)}
/>
// 禁止结束日期选择
export function disabledEndDt(e: any, startDt?: any, endDt?: any, disBeforeToday?: boolean, dtFormat: string = formatDate) {
  e = moment(e).format(dtFormat);
  if (e && typeof e == "string") {
    e = moment(e, dtFormat);
  }
  if (startDt && typeof startDt == "string") {
    startDt = moment(startDt, dtFormat);
  }
  if (endDt && typeof endDt == "string") {
    endDt = moment(endDt, dtFormat);
  }
  if (e && startDt && endDt) {
    let res =
      startDt.valueOf() > endDt.valueOf() ? endDt.valueOf() : startDt.valueOf();
    if (disBeforeToday) {
      return e < moment().startOf("day") || e.valueOf() > res.valueOf();
    }
    return e.valueOf() < res.valueOf();
  } else if (e && startDt) {
    if (disBeforeToday) {
      return e < moment().startOf("day") || e.valueOf() < startDt.valueOf();
    }
    return e.valueOf() < startDt.valueOf();
  } else if (e && disBeforeToday) {
    return e < moment().startOf("day");
  }
  return false;
}

3、传入日期,返回指定格式的日期

/*
  传入日期,返回指定格式的日期
  t: 不穿返回原数据, t=today返回当前日期(可选)
  dtFormat: 时间格式,默认"YYYY-MM-DD"(可选)
*/
export function backFormatDate(t?:any, dtFormat: string = formatDate) {
  if(t==='today'){
    return moment().format(dtFormat);
  } else {
    if (t) {
      return moment(t, dtFormat).format(dtFormat);
    } else {
      return t;
    }
  }
}

4、传入日期,返回moment格式的日期

/*
  传入日期,返回moment格式的日期
  dtFormat: 时间格式,默认"YYYY-MM-DD"(可选)
*/
export function backFormatMoment(t:any, dtFormat: string = formatDate) {
  return t? moment(t, dtFormat): t;
}

三、对象-常用转化方法

1、判断对象多层结构数据是否存在、 不存在返回undefined

/*
  判断对象多层结构数据是否存在、 不存在返回undefined
  let res= checkHasData(data, ['key1', 'key2', 'key3', 'key4'])
*/
export function checkHasData(obj: object, arr: Array<string>, idx?: number): any {
  let res;
  let i = 0;
  if (idx) {
    i = idx;
  }
  if (arr.length <= i) {
    res = obj;
  } else {
    const element = arr[i];
    if (element) {
      if (obj[element]) {
        return checkHasData(obj[element], arr, i + 1);
      }
    }
  }
  return res;
}

2、判断对象1中的值在对象2中是否相等 相等返回 true, 如果有一个值不相等返回false, objNew中新加的字段不作处理, 只对objPrep中的字段作处理

/*
  判断对象1中的值在对象2中是否相等 相等返回 true,
  如果有一个值不相等返回false,
  objNew中新加的字段不作处理, 只对objPrep中的字段作处理
  objPrep原对象,objNew新对象
  arr指定数组里的key不比较,如['userID'] (可选)
*/
export function compareDataBlur(objPrep: object, objNew: object, arr?: Array<string>) {
  if ((objPrep && !objNew) || (objNew && !objPrep)) {
    return false;
  }
  let flag = true;
  for (var key in objNew) {
    // objNew[key]没有值不做比较
    if (objPrep.hasOwnProperty(key)) {
      let flag1 =
        objPrep[key] !== null && objPrep[key] !== undefined && objPrep[key] !== "";
      let flag2 =
        objNew[key] !== null && objNew[key] !== undefined && objNew[key] !== "";
      let flag3 = (arr || []).indexOf(key);
      if (flag3 == -1) {
        if (flag1 || flag2) {
          if (JSON.stringify(objPrep[key]) != JSON.stringify(objNew[key])) {
            console.log("diff", key, objPrep[key], objNew[key]);
            flag = false;
          }
        }
      }
    }
  }
  return flag;
}

四、数字-常用转化方法

1、判断指是否为空 空位false 不为空为true

/*
判断指是否为空 空位false 不为空为true
*/
export function notNull(value: any) {
  return !(!value && value !== 0);
}

2、输入正数限制,解析不出来返回undefined

/*
输入正数限制,解析不出来返回undefined
input输入数字限制e(value), dotNum(小数位数)
*/
export function inputOnlyNumber(e: any, dotNum: number = 2, minusFlag?: boolean) {
  let value = e.replace(/[^\d.]/g, "");
  if (minusFlag) {
    value = value.replace(/[^\-?\d.]/g, "");
  }
  let str = `'${value}'`;
  let idx1 = str.indexOf(".");
  let idx0 = str.indexOf("00");
  // 第一位是小输点,清空
  if (idx1 === 1) {
    value = "";
    return;
  }
  // 最前面出现多个0,清空
  if (idx0 === 1) {
    value = "";
    return;
  }
  // 去除第一个‘.’后面的点
  value = value
    .replace(".", "$#$")
    .replace(/\./g, "")
    .replace("$#$", ".");
  str = `'${value}'`;
  idx1 = str.indexOf(".");
  // 有小数点时保留几位小数
  if (idx1 != -1) {
    value = value.slice(0, value.indexOf(".") + (dotNum) + 1);
  }
  return value;
}

3、数字改千位分割

/*
数字改千位分割
*/
export function changeToThousand(num: any) {
  if (!notNull(num)) {
    return num;
  }
  let resNum;
  num = (num + "").replace(/,/g, "");
  resNum = Number(num);
  if (resNum >= 0) {
    return (
      num && num.toString().replace(/^\d+/, (m: any) => m.replace(/(?=(?!^)(\d{3})+$)/g, ","))
    );
  } else {
    num = 0 - num;
    return (
      "-" +
      (num && num.toString().replace(/^\d+/, (m: any) => m.replace(/(?=(?!^)(\d{3})+$)/g, ",")))
    );
  }
}

4、千位字符串转正常数字

/*
千位字符串转正常数字
*/
export function stringToThousand(num: any) {
  if (!notNull(num)) {
    return num;
  }
  return num.replace(/\,/g, "");
}

5、类组件专属方法change方法

/* 类组件专属方法
输入改变 e输入框值,obj={objKey: '对象的值', key: '键值'},
如:this.state.obj={a: '1'},则obj={objKey: 'obj', key: 'a'}
objKey 不存在直接设置到obj={ key: 'a'},this.state.a = '1'
type类型time、inputNumber,剩下的走默认
*/
export function changeFun(e: any, _this: any, obj: any, type?: string, cd?: (__e: any, __this: any, __obj: any, __type?: string) => void) {
  let val = e;
  if (type == "time") {
    val = backFormatDate(e, obj.dateFormat);
  } else {
    val = e && e.target ? e.target.value : e;
  }
  if (obj.objKey) {
    let dt = JSON.parse(JSON.stringify(_this.state[obj.objKey]));
    if (type == "inputNumber") {
      val =
        inputOnlyNumber(val, obj.dotNum) !== undefined
          ? inputOnlyNumber(val, obj.dotNum)
          : dt[obj.key];
    }
    dt[obj.key] = val;
    _this.setState(
      {
        [obj.objKey]: dt
      },
      () => {
        if (cd) {
          cd(e, _this, obj, type);
        }
      }
    );
  } else {
    if (type == "inputNumber") {
      val =
        inputOnlyNumber(val, obj.dotNum) !== undefined
          ? inputOnlyNumber(val, obj.dotNum)
          : _this.state[obj.key];
    }
    _this.setState(
      {
        [obj.key]: val
      },
      () => {
        if (cd) {
          cd(e, _this, obj, type);
        }
      }
    );
  }
}

写的有不足的地方,望大家及时指出,谢谢。 

举报

相关推荐

0 条评论