欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

函数库

程序员文章站 2022-06-03 18:55:16
...

// 字符串常用函数

/**
* trim 去除空格
* param1  string str 待处理字符串
* param2  number type 去除空格类型 1-所有空格  2-前后空格 3-前空格 4-后空格 默认
* return string str 处理后的字符串
*/

function trim(str, type) {
  if(type && type !== 1 && type !==2 && type !==3 && type !==4) return;
  switch(type) {
    case 1:
    return str.replace(/\s/g, "");
    case 2:
    return str.replace(/(^\s)|(\s*$)/g, "");
    case 3:
    return str.replace(/(^\s)/g, "");
    case 4:
    return str.replace(/(\s$)/g, "");
    default:
    return str;
  }
}


/**
* 大小写转换
* param1 string str 待转换的字符串
* param2 number type 1-全大写 2-全小写 3-首字母大写
* return string str 处理后的字符串
*/

function turnCase(str, type) {
  switch(type){
    case 1:
    return str.toUpperCase();
    case 2:
    return str.toLowerCase();
    case 3:
    return str[0].toUpperCase() + str.substr(1).toLowerCase();
    default:
    return str;
  }
}

/**
* 大小写相互转换
* param string str 待转换的字符串
* return string result 处理后的字符串
*/

function parseCase(str){
  let result = '';
  for(let i = 0; i < str.length; i++) {
    let temp = str.charAt(i);
    let code = temp.charCodeAt();
    if ('a' <= temp && temp <= 'z') {
      temp = String.fromCharCode(code - 32);
    } else if ('A' <= temp && temp <= 'Z') {
      temp = String.fromCharCode(code + 32);
    }
    result += temp;
  }
  return result;
 }

/**
* 密码强度判断 checkPwdStrength
* param string str 待转换的字符串
* 低于6为强度为0,字母+1,数字+1,下划线+1,特殊字符[email protected]#$%+1,最高为4
* return number lv 密码强度等级
*/

function checkPwdStrength(password) {
  // 定义一个变量存储密码强度等级,默认为0
  let lv = 0;
  if (password.match(/[a-z]/g)) { lv++; } // 密码包含字母
  if (password.match(/[0-9]/g)) { lv++; } // 密码包含数字
  if (password.match(/_/g)) { lv++; } // 密码包含下划线
  if (password.match(/[[email protected]#$%]/g)) { lv++; } // 密码包含[email protected]#$%任意特殊字符
  if (password.length < 6) { lv = 0; }
  if (lv > 4) { lv = 4; }
  return lv;
}

/**
* 随机16进制颜色 hexColor
* return string str 带#号的随机16进制颜色
*/

function hexColor(){
  let str = '#';
  let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];
  for(let i = 0; i < 6; i++) {
    let index = Number.parseInt(Math.random()*16);
    str += arr[index]
  }
  return str;
}

/**
* 逆序输出 reverse
* param string str 源字符串
* return string result 逆序输出的字符串
*/

function reverse(str) {
  let result = '';
  for (let i = str.length -1; i >= 0; i--) {
    result += str[i]
  }
  return result;
}

/**
* 短横,下划线与小驼峰的相互转化 caseFormat
* param1 string str 待转换字符串
* param2 string type '-' or '_',默认为下划线
* return string str 转换字符串
*/

function caseFormat(str, type = '_'){
  if (type && type !== '-' && type !== '_') return;
  let result = '';
  if (str.includes(type)) {
    let arr = str.split(type);
    result = arr[0];
    for(let i = 0; i < arr.length - 1; i++) {
      result += arr[i + 1][0].toUpperCase() + arr[i + 1].substr(1).toLowerCase()
    }
  }else {
    result = str.replace(/[A-Z]/g, function(match){
      return type + match.toLowerCase();
    })
  }
  return result;
}

/**
* 时间格式化 dateFormat 形式--“20190803 11:01:07”
* param1 Date date 待格式化的时间
* param2 number type 格式化范围 1-精确到月 2-精确到日 3-精确到分钟 4-精确到秒
* return string time 格式化后的时间
*/

function dateFormat(date, type = 4) {
  if (type && type !== 1 && type !== 2 && type !== 3 && type !== 4) return;
  let y = date.getFullYear().toString();
  let m = (date.getMonth()+1).toString().padStart(2,'0');
  let d = date.getDate().toString().padStrat(2,'0');
  let h = date.getHours().toString().padStart(2, '0');
  let M = date.getMinutes().toString().padStart(2, '0');
  let s = date.getSeconds().toString().padStart(2, '0');
  if (type === 1) return y + m;
  if (type === 2) return y + m + d;
  if (type === 3) return y + m + d + " " + h + ":" + M;
  if (type === 4) return y + m + d + " " + h + ":" + M + ":" + s;
}

/**
* 指定位数随机码 randomCode
* param number count 随机码为数
* return string str 指定位数随机码
*/

function randomCode(){
  let str = '';
  let number_arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
  let string_arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
  let arr = [...number_arr, ...string_arr];
  for(let i = 0; i < count; i++) {
    let index = Number.parseInt(Math.random() * arr.length);
    str += arr[index]
  }
  return str;
}

/**
* 防抖 preventShake
* param function fn 要进行防抖的函数
*/

const preventShake = (fn) => {
  let timer = null  // 创建定时器 id
  retrun () => {
     clearTimeout(timer)  // 时间频繁触发,清除之前定时器
     timer = setTimeout(() => {
        // 创建新定时器,保证限定时间间隔fn只执行一次
        fn()
     }, 500)
  }
}

/**
* 节流 throttle
* param function fn 要进行节流的函数
*/

const throttle = (fn) => {
   let lock = true;  // 函数外设置状态锁,默认开启
   return () => {
     if (!lock) retrun;  // 在函数开头判断标记是否为true,不为true,则return,阻止后续程序进行
     lock = false;  // 改变状态锁
     setTimeout(() => {
       fn()
       // 函数执行完,回调中改变状态锁
       lock = true
     }, 1000)
   }
}

/**
* 深拷贝 deepCopy
* param Object obj 要进行拷贝的对象
* return Object obj 拷贝后的对象
*/

function deepCopy (obj) {
  let o = obj instanceof Array ? [] : {};
  for(let i in obj) {
    let val = obj[i];
    if (typeof val === 'object') {
      o[i] = deepCopy(val);
    } else {
      o[i] = val;
    }
  }
  return o;
}

/**
* 让网页变得干净 clearWebSite
* tip: 本质是将 html-body 内容隐藏并清除控制台
*/

function clearWebSite(){
   document.body.setAttribute('hidden', true);
   window.clear();  // 清除控制台
}

上一篇: 面膜真薄

下一篇: Shell 函数库