js常用的工具函数

1. 深拷贝

export function cloneDeep(obj) {
  // 当null NaN undefined number string等基本数据类型时直接返回
  if (obj === null || typeof obj !== 'object') {
    return obj
  }
  // Date类型
  if (obj instanceof Date) {
    console.log(obj);
    const copy = new Date()
    copy.setTime(obj.getTime())
    return copy
  }
  // 正则类型类型
  if (obj instanceof RegExp) {
    const Constructor = obj.constructor
    return new Constructor(obj)
  }
  // 如果是数组等引用数据类型
  if (obj instanceof Array || obj instanceof Object) {
    const copyObj = Array.isArray(obj) ? [] : {}
    for (const key in obj) {
      if (obj.hasOwnProperty(key)) {
        copyObj[key] = cloneDeep(obj[key])
      }
    }
    return copyObj
  }
}

2. 获取label值

//根据常量value获取常量label
/**
 * 获取label值
 * @param {string} str
 * @param {Array} arr
 * @param {string} label
 * @param {string | number} value
 */
 export function getLabel(str, arr, label = 'label', value = 'value') {
  if (!String(str)) return ''
  const newObj = arr.find(item => String(item[value]) === String(str))
  const returnValue = newObj ? newObj[label] : ''
  return returnValue
}

3. 下载文件

 export function downFile(url, name) {
  const link = document.createElement('a')
  link.href = url
  link.target = '_blank'
  link.setAttribute('download', name) // 下载文件的名称及文件类型后缀
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link) // 下载完成移除元素
}

4. 验证身份证是否有效

// 验证身份证
export const validateIdCard = (rule, value, callback) => {
  const reg = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[X])$)$/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的身份证号码'));
    } else {
      callback();
    }
  }
}

5. 各种验证

// 正整数
export const isInteger = (rule, value, callback) => {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  if (!Number(value)) {
    callback(new Error('请输入正整数'));
  } else {
    const re = /^[0-9]*[1-9][0-9]*$/;
    const rsCheck = re.test(value);
    if (!rsCheck) {
      callback(new Error('请输入正整数'));
    } else {
      callback();
    }
  }
}


// 数字能为小数
export const decimal = (rule, value, callback) => {
  if (!/(^[1-9]([0-9]+)?(.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9].[0-9]([0-9])?$)/.test(value)) {
    callback(new Error('最多两位小数'));
  } else if(Number(value) < 0) {
    callback(new Error('需要大于0'));
  } else {
    callback();
  }
}

// 验证手机号
export const validatePhone = (rule, value, callback) => {
  const reg = /^1[3|4|5|6|7|8|9]\d{9}$/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的电话号码'));
    } else {
      callback();
    }
  }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值