实际项目中的通用函数封装(持续更新)

1.生成随机数

export const randomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;

2.数组操作

  2.1 数组扁平化(多维数组转一维数组)

1
export const flatten = function(arr){ return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])};

  2.2 获取数组中的随机项

export const sample = arr => arr[Math.floor(Math.random() * arr.length)];

3.字符串操作

  3.1 生成随机字符串

复制代码
export const randomString = (len) => {
    let chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz123456789';
    let strLen = chars.length;
    let randomStr = '';
    for (let i = 0; i < len; i++) {
        randomStr += chars.charAt(Math.floor(Math.random() * strLen));
    }
    return randomStr;
};
复制代码

  3.2 手机中间四位变*(手机隐藏处理)

export const telFormat = (tel) => {
   tel = String(tel); 
   return tel.substr(0,3) + "****" + tel.substr(7);
};

4 格式转化

  4.1 日期格式化

复制代码
function parseTime(time, pattern) {
    if (arguments.length === 0 || !time) {
        return null
    }
    const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
    let date
    if (typeof time === 'object') {
        date = time
    } else {
        if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
            time = parseInt(time)
        } else if (typeof time === 'string') {
            time = time.replace(new RegExp(/-/gm), '/');
        }
        if ((typeof time === 'number') && (time.toString().length === 10)) {
            time = time * 1000
        }
        date = new Date(time)
    }
    const formatObj = {
        y: date.getFullYear(),
        m: date.getMonth() + 1,
        d: date.getDate(),
        h: date.getHours(),
        i: date.getMinutes(),
        s: date.getSeconds(),
        a: date.getDay()
    }
    const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
        let value = formatObj[key]
        // Note: getDay() returns 0 on Sunday
        if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
        if (result.length > 0 && value < 10) {
            value = '0' + value
        }
        return value || 0
    })
    return time_str
}
parseTime(new Date(),'{y}-{m}-{d} {h}:{i}:{s}')  // '2022-01-05 16:13:17'
复制代码

  4.2 数字转化为大写金额

复制代码
export const digitUppercase = (n) => {
    const fraction = ['角', '分'];
    const digit = [
        '零', '壹', '贰', '叁', '肆',
        '伍', '陆', '柒', '捌', '玖'
    ];
    const unit = [
        ['元', '万', '亿'],
        ['', '拾', '佰', '仟']
    ];
    n = Math.abs(n);
    let s = '';
    for (let i = 0; i < fraction.length; i++) {
        s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
    }
    s = s || '整';
    n = Math.floor(n);
    for (let i = 0; i < unit[0].length && n > 0; i++) {
        let p = '';
        for (let j = 0; j < unit[1].length && n > 0; j++) {
            p = digit[n % 10] + unit[1][j] + p;
            n = Math.floor(n / 10);
        }
        s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
    }
    return s.replace(/(零.)*零元/, '元')
        .replace(/(零.)+/g, '零')
        .replace(/^整$/, '零元整');
};
复制代码

  4.3 数字转化为中文数字

复制代码
export const intToChinese = (value) => {
 const str = String(value);
 const len = str.length-1;
 const idxs = ['','十','百','千','万','十','百','千','亿','十','百','千','万','十','百','千','亿'];
 const num = ['零','一','二','三','四','五','六','七','八','九'];
 return str.replace(/([1-9]|0+)/g, ( $, $1, idx, full) => {
    let pos = 0;
    if($1[0] !== '0'){
      pos = len-idx;
      if(idx == 0 && $1[0] == 1 && idxs[len-idx] == '十'){
        return idxs[len-idx];
      }
      return num[$1[0]] + idxs[len-idx];
    } else {
      let left = len - idx;
      let right = len - idx + $1.length;
      if(Math.floor(right / 4) - Math.floor(left / 4) > 0){
        pos = left - left % 4;
      }
      if( pos ){
        return idxs[pos] + num[$1[0]];
      } else if( idx + $1.length >= len ){
        return '';
      }else {
        return num[$1[0]]
      }
    }
   });
}
复制代码

5.js操作

  5.1 深拷贝

 

  5.2 数据类型判断

export const objecType= (obj)=>{ return Obj.prototype.toString.call(obj).slice(8,-1).toLowerCase()};

  5.3 获取特殊日期

复制代码
export nowTime = (pattern)=> { // 获取当前时间
  var now = new Date()
  var year = now.getFullYear() //
  var month = now.getMonth() + 1 //
  var lastMonth = now.getMonth() // 上月
  var day = now.getDate() //
  var hh = now.getHours() //
  var mm = now.getMinutes() //
  var ss = now.getSeconds() //
  if (month < 10) {
    month = '0' + month
  }
  if (lastMonth < 10) {
    lastMonth = '0' + lastMonth
  }
  if (day < 10) {
    day = '0' + day
  }
  if (hh < 10) {
    hh = '0' + hh
  }
  if (mm < 10) {
    mm = '0' + mm
  }
  if (ss < 10) {
    ss = '0' + ss
  }
  if (pattern === 'time') {
    return hh + ':' + mm + ':' + ss // 获取当前时间
  } else if (pattern === 'year') {
    return year // 获取当前年份
  } else if (pattern === 'month') {
    return month // 获取当前月份
  } else if (pattern === 'day') {
    return day // 获取当前月份
  } else if (pattern === 'yearMonth') {
    return year + '-' + month // 获取当前月份
  } else if (pattern === 'YM') {
    return year + '-' + lastMonth // 获取当年上月
  } else if (pattern === 'date') {
    return year + '-' + month + '-' + day // 获取当前日期
  } else if (pattern === 'yesdate') {
    return year + '-' + month + '-' + (day-1) // 获取昨天日期
  } else if (pattern === 'allTime') {
    return year + month + day + hh + mm + ss // 获取日期与时间
  }
}
复制代码

  5.4 防抖 

复制代码
export function debounce(func, wait, immediate) {
  let timeout, args, context, timestamp, result

  const later = function() {
    // 据上一次触发时间间隔
    const last = +new Date() - timestamp

    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
    if (last < wait && last > 0) {
      timeout = setTimeout(later, wait - last)
    } else {
      timeout = null
      // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
      if (!immediate) {
        result = func.apply(context, args)
        if (!timeout) context = args = null
      }
    }
  }

  return function(...args) {
    context = this
    timestamp = +new Date()
    const callNow = immediate && !timeout
    // 如果延时不存在,重新设定延时
    if (!timeout) timeout = setTimeout(later, wait)
    if (callNow) {
      result = func.apply(context, args)
      context = args = null
    }

    return result
  }
}
复制代码

   5.5 节流

6.判断对象是否为空

const isEmpty = obj => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object;

 

posted @   月下云生  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示