js 常用工具类/方法

1、金额格式化

/**
 * @desc 金额格式化
 * @param s  金额
 * @param n  保留的小数位数
 * @return {String}
 */
function formatMoney(s, n = 2) {
	if(s){
		  n = n > 0 && n <= 20 ? n : 2;  
	    s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";  
	    let l = s.split(".")[0].split("").reverse(), r = s.split(".")[1];  
	    t = "";  
	    for (i = 0; i < l.length; i++) {  
	        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");  
	    }  
	    return "¥"+t.split("").reverse().join("") + "." + r;  
	}else{
		return "¥ 0.00";
	}
    
}

2、日期格式化

/**
 * @desc 日期格式化
 * @param date  日期
 * @param type  格式化类型
 * @return {String}
 */
function dateFormat(date, type = 'ymd') {
  if(!date) return ''
  date = new Date(date)
  const opt = {
      Y: date.getFullYear().toString(),
      M: (date.getMonth() + 1).toString().padStart(2,0),
      D: date.getDate().toString().padStart(2,0),
      HH: date.getHours().toString().padStart(2,0),
      MM: date.getMinutes().toString().padStart(2,0),
      SS: date.getSeconds().toString().padStart(2,0)
  };
  if(type === 'ymd') {
      return `${opt.Y}-${opt.M}-${opt.D}`
  }
  return `${opt.Y}-${opt.M}-${opt.D} ${opt.HH}:${opt.MM}:${opt.SS}`
}

3、验证身份证号码

/**
 * @desc 验证身份证号码
 * @param card  身份证号码
 * @return {String}
 */
function isCardNo(card)  
{  
   // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X  
   let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;  
   if(reg.test(card) === false)  
   {  
      console.log("身份证输入不合法");  
      return  false;  
   }else{
      console.log("身份证输入合法");  
      return  true;  
   }  
}

4、验证手机、电话号码


/**
 * 验证手机、电话号码
 * @param 获取的电话号码输入值value
 * @return true/false
 */
function checkPhone(value) {
	let reg1 = /^\d{7,11}$/;
	let reg2 = /^([0-9]{3,4}-)?[0-9]{7,8}$/;
	if(value.length == 0){ 
		return false;
	}else{
		return reg1.test(value) || reg2.test(value);
	}
}

5、函数防抖


/**
 * @desc 函数防抖
 * @param func 函数
 * @param wait 延迟执行毫秒数
 * @param immediate true 表立即执行,false 表非立即执行
 */
function debounce(func, wait, immediate) {
  let timeout;
  return function () {
      const context = this;
      const args = [...arguments];
      if (timeout) clearTimeout(timeout);
      if (immediate) {
          const callNow = !timeout;
          timeout = setTimeout(() => {
              timeout = null;
          }, wait)
          if (callNow) func.apply(context, args)
      } else {
          timeout = setTimeout(() => {
              func.apply(context, args)
          }, wait);
      }
  }
}

6、函数节流


/** 
 * @desc 函数节流
 * @param func 函数
 * @param wait 延迟执行毫秒数
 * @param type 1 表时间戳版,2 表定时器版
 */
function throttle(func, wait, type) {
  let previous, timeout;
  if (type === 1) {
      previous = 0;
  } else if (type === 2) {
      timeout;
  }
  return function () {
      let context = this;
      let args = arguments;
      if (type === 1) {
          let now = Date.now();

          if (now - previous > wait) {
              func.apply(context, args);
              previous = now;
          }
      } else if (type === 2) {
          if (!timeout) {
              timeout = setTimeout(() => {
                  timeout = null;
                  func.apply(context, args)
              }, wait)
          }
      }

  }
}

7、过滤对象中的值为空的字段


/**
 * @desc 过滤对象中的值为空的字段
 * @param {*待过滤的数据对象} params
 * @return {过滤后的对象}
 */

function objectFilters (params = {}) {
  for (let key in params) {
      if (params[key] === '') {
        delete params[key];
  }
}
  return params;
}

8、将对象数组转换为以指定字段为key的对象


/**
 * @desc 将对象数组转换为以指定字段为key的对象
 * @param {Array} arrs (将要转换的数组)
 * @param {String} key (以哪个字段作为对象的key)
 * @return {转换后的对象}
 */
function arrayToObj (arrs = [], key = 'id') {
  const params = {};
  for (let i = 0, len = arrs.length; i < len; i++) {
    const item = arrs[i];
    params[item[key]] = item;
  }
  return params;
};

9、将对象转换为以key对应的值为内容的数组


/**
 * @desc 将对象转换为以key对应的值为内容的数组
 * @param {Object} obj (将要转换的对象)
 * @return [Array] 转换后的数组
 */
function objToArray (obj = {})  {
  const arr = [];
  Object.keys(obj).forEach(key => {
    arr.push(obj[key]);
  });
  return arr;
};

10、一维数组换二维数组


/**
 * @desc 一维数组换二维数组
 * @param num 子数组中元素的个数
 * @param arr 一维数组
 * @return [[array],[array]] 生成的二维数组
 */
function arrTrans (num, arr) {
  let doubleArr = []; 
  arr.forEach((item, index) => {
    let page = Math.floor(index / num); 
    if (!doubleArr[page]) { 
      doubleArr[page] = [];
    }
    doubleArr[page].push(item);
  });
  return doubleArr;
};


11、获取十六进制随机颜色

/**
 * @desc 获取十六进制随机颜色
 * @return String 生成的十六进制颜色
 */
function randomColor() {
  return '#' + ('00000' + (Math.random() * 0x1000000 << 0).toString(16)).slice(-6);
};


12、保留n位小数

/**
 * @desc 保留n位小数
 * @param num 原始数
 * @param n 保留的小数位数
 * @return String 
 */
function filterToFixed(num, n = 2) {
  try{
      return parseFloat(num.toFixed(n), 10);
  } catch (e) {
      return num;
  }
};

13、判断是否为空对象

/**
 * @desc 判断是否为空对象
 * @param obj 待判断的对象
 * @return Boolean true/false 
 */

function isEmptyObject(obj){
    if (JSON.stringify(obj) == "{}") {
      return true;
    } else {
        return false;
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值