JS工具函数

104 阅读1分钟
校验数据类型
export const typeOf = function(obj) {  
  return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()  
}
手机号脱敏
export const hideMobile = (mobile) => {  
  return mobile.replace(/^(\d{3})\d{4}(\d{4})$/"$1****$2")  
}
大小写转换
  • str 待转换的字符串
  • type 1-全大写 2-全小写 3-首字母大写
export const turnCase = (strtype) => {  
  switch (type) {  
    case 1:  
      return str.toUpperCase()  
    case 2:  
      return str.toLowerCase()  
    case 3:  
      //return str[0].toUpperCase() + str.substr(1).toLowerCase() // substr 已不推荐使用  
      return str[0].toUpperCase() + str.substring(1).toLowerCase()  
    default:  
      return str  
  }  
}
解析URL参数
export const getSearchParams = () => {  
  const searchPar = new URLSearchParams(window.location.search)  
  const paramsObj = {}  
  for (const [key, value] of searchPar.entries()) {  
    paramsObj[key] = value  
  }  
  return paramsObj  
}
数组对象根据字段去重
  • arr 要去重的数组
  • key 根据去重的字段名
export const uniqueArrayObject = (arr = [], key = 'id') => {  
  if (arr.length === 0) return  
  let list = []  
  const map = {}  
  arr.forEach((item) => {  
    if (!map[item[key]]) {  
      map[item[key]] = item  
    }  
  })  
  list = Object.values(map)  
  
  return list  
}
uuid随机值
export const uuid = () => {  
  const temp_url = URL.createObjectURL(new Blob())  
  const uuid = temp_url.toString()  
  URL.revokeObjectURL(temp_url) //释放这个url  
  return uuid.substring(uuid.lastIndexOf('/') + 1)  
}
金额格式化
  • {number} number:要格式化的数字
  • {number} decimals:保留几位小数
  • {string} dec_point:小数点符号
  • {string} thousands_sep:千分位符号
export const moneyFormat = (number, decimals, dec_point, thousands_sep) => {  
  number = (number + '').replace(/[^0-9+-Ee.]/g'')  
  const n = !isFinite(+number) ? 0 : +number  
  const prec = !isFinite(+decimals) ? 2 : Math.abs(decimals)  
  const sep = typeof thousands_sep === 'undefined' ? ',' : thousands_sep  
  const dec = typeof dec_point === 'undefined' ? '.' : dec_point  
  let s = ''  
  const toFixedFix = function(n, prec) {  
    const k = Math.pow(10, prec)  
    return '' + Math.ceil(n * k) / k  
  }  
  s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.')  
  const re = /(-?\d+)(\d{3})/  
  while (re.test(s[0])) {  
    s[0] = s[0].replace(re, '$1' + sep + '$2')  
  }  
  
  if ((s[1] || '').length < prec) {  
    s[1] = s[1] || ''  
    s[1] += new Array(prec - s[1].length + 1).join('0')  
  }  
  return s.join(dec)  
}
模糊搜索
  • list 原数组
  • keyWord 查询的关键词
  • attribute 数组需要检索属性
export const fuzzyQuery = (list, keyWord, attribute = 'name') => {  
  const reg = new RegExp(keyWord)  
  const arr = []  
  for (let i = 0; i < list.length; i++) {  
    if (reg.test(list[i][attribute])) {  
      arr.push(list[i])  
    }  
  }  
  return arr  
}
遍历树节点
export const foreachTree = (data, callback, childrenName = 'children') => {  
  for (let i = 0; i < data.length; i++) {  
    callback(data[i])  
    if (data[i][childrenName] && data[i][childrenName].length > 0) {  
      foreachTree(data[i][childrenName], callback, childrenName)  
    }  
  }  
}