一些项目中用到的方法(正则、去重、时间转换and more)

正则表达式

1、验证IP

/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/

2、验证邮箱

/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

3、验证端口

/^([1-9]\d{0,4})$/

4、验证http开头的IP

/^(http|https):\/\/(((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3})|([a-z0-9]+(\.{1}[a-z0-9]+)*(\.[a-z]+){1}))(:([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-5]{2}[0-3][0-5])){0,1}$/

5、验证输入值为字母数字下划线,且以字母开头

/^([a-zA-Z]+[A-Za-z0-9_]*[a-zA-Z0-9_]*)$/

6、检查是否包含中文

/[\u4E00-\u9FA5\uF900-\uFA2D]/

对象数组转换

1、数组去重

var arr = [1,2,3,4,1,2]
[...new Set(arr)] => [1,2,3,4]

2、获取数组的重复元素

function getRepeatItems(array) {
  const repeatItem = [],
    map = new Map()
  array.forEach((item) => {
    if (map.has(item) && !repeatItem.includes(item)) {
      repeatItem.push(item)
    }
    if (!map.has(item)) {
      map.set(item, item)
    }
  })
  return map
}
getRepeatItems([1,2,3,4,1,2]) => [1,2]

3、去掉object中值为空的key

//注 isNil omit为lodash中的方法
function omitNilKey(obj){
  const omitKeyArray = []
  for (const key in obj) {
    if (isNil(obj[key]) || obj[key] === '') {
      omitKeyArray.push(key)
    }
  }
  return omit(obj, omitKeyArray)
}
omitNilKey({label: '', value: 'xxxxxx', name: 1 }) => {value: "xxxxxx", name: 1}

3、将秒语义化

function convertSecondsToTotalTime(seconds) {
  if (seconds > 0 && seconds < 1) {
      return `${seconds.toFixed(2)}秒`
    }
    if (seconds === 0) {
      return '暂无数据'
    }
    let second = parseInt(seconds, 10)
    let minute = 0
    let hour = 0
    let result = ''
    if (second > 60) {
      minute = parseInt(second / 60, 10)
      second = parseInt(second % 60, 10)
      if (minute > 60) {
        hour = parseInt(minute / 60, 10)
        minute = parseInt(minute % 60, 10)
      }
    }
    result += hour > 0 ? `${hour}小时` : ''
    result += minute > 0 ? `${minute}分` : ''
    result += second > 0 ? `${second}秒` : ''
    return result
  }
  convertSecondsToTotalTime(6000) => 1小时40分
}