前端写项目常用的JS方法封装(上)

159 阅读2分钟

些项目有些方法会频繁用到,直接封装好需要直接引入。欢迎提出不同见解0.0

1.清空本地缓存数据

export function clearLocalData() {
  localStorage.clear();
  sessionStorage.clear();
}

2.输入值自动加千位分隔符

export function toThousands(num) {
  return (
    num &&
    num.toString().replace(/\d+/, function(s) {
      return s.replace(/(\d)(?=(\d{3})+$)/g, '$1,');
    })
  );
}

3.校验是否为正整数

export function isInteger(value) {
  return /^\d+$/.test(value);
}

4.校验10位整数2位小数(可自行修改)

export function validNumberTen(value) {
  return /^[0-9]{1,10}(.\d{1,10})?$/.test(value);
}

5.获取指定日期第一天或最后一天

//第一天
export function getFirstDate(date) {
  const d = new Date(date);
  const y = d.getFullYear();
  const m = d.getMonth();
  return new Date(y, m, 1);
}
//最后一天
export function getLastDate(date) {
  const d = new Date(date);
  const y = d.getFullYear();
  const m = d.getMonth();
  return new Date(y, m + 1, 0);
}

6.浮点值的运算-除法

export function accDiv(arg1, arg2) {
  var t1 = 0,
    t2 = 0,
    r1,
    r2;
  try {
    t1 = arg1.toString().split('.')[1].length;
  } catch (e) {}
  try {
    t2 = arg2.toString().split('.')[1].length;
  } catch (e) {}
  r1 = Number(arg1.toString().replace('.', ''));
  r2 = Number(arg2.toString().replace('.', ''));
  return (r1 / r2) * Math.pow(10, t2 - t1);
}

7.返回指定月份当前所属季度

export function getQuarterFromMonth(month) {
  let quarter = null;
  if (month >= 1 && month <= 3) {
    quarter = 1;
  } else if (month >= 4 && month <= 6) {
    quarter = 2;
  } else if (month >= 7 && month <= 9) {
    quarter = 3;
  } else if (month >= 10 && month <= 12) {
    quarter = 4;
  }
  return quarter;
}

8.获取指定季度第一天

export function getQuarterFirstDate(quarter, year) {
  const currentDate = `${year}-${3 * (quarter - 1) + 1}`;
  let date = new Date(currentDate);
  let month = date.getMonth() + 1;
  if (1 <= month && month <= 3) {
    date.setMonth(0);
  } else if (4 <= month && month <= 6) {
    date.setMonth(3);
  } else if (7 <= month && month <= 9) {
    date.setMonth(6);
  } else {
    date.setMonth(9);
  }
  return moment(date).format('YYYY-MM-DD');
}

9.获取指定季度最后一天

export function getQuarterLastDate(quarter, year) {
  const currentDate = `${year}-${3 * (quarter - 1) + 1}`;
  let date = new Date(currentDate);
  let month = date.getMonth() + 1;
  if (1 <= month && month <= 3) {
    date.setMonth(3);
  } else if (4 <= month && month <= 6) {
    date.setMonth(6);
  } else if (7 <= month && month <= 9) {
    date.setMonth(9);
  } else {
    date.setMonth(12);
  }
  date.setDate(0);
  return moment(date).format('YYYY-MM-DD');
}

10.将人民币金额转换为大写 同时支持小数、负数

export function convertPrice(price) {
  if (isNaN(Math.abs(price))) {
    throw new Error('传递的金额格式不正确,参考是否非数字或者NaN');
  }
  let fraction = ['角', '分'];
  let digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
  let unit = [
    ['元', '万', '亿'],
    ['', '拾', '佰', '仟']
  ];
  let head = price < 0 ? '欠' : '';
  price = Math.abs(price);
  let s = '';
  for (let i = 0; i < fraction.length; i++) {
    s += (digit[Math.floor(price * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
  }
  s = s || '整';
  price = Math.floor(price);
  for (let i = 0; i < unit[0].length && price > 0; i++) {
    let p = '';
    for (let j = 0; j < unit[1].length && price > 0; j++) {
      p = digit[price % 10] + unit[1][j] + p;
      price = Math.floor(price / 10);
    }
    s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
  }
  return (
    head +
    s
      .replace(/(零.)*零元/, '元')
      .replace(/(零.)+/g, '零')
      .replace(/^整$/, '零元整')
  );
}