JavaScript常用工具类util记录,时不时更新

本文分享了JavaScript中的一些实用工具函数,包括对象转URL字符串、精确数值计算、处理差值、数字转换以及计算星期等功能。这些函数可以解决在开发过程中常见的精度丢失和日期处理等问题,提高代码效率。

JavaScript常用工具类util记录,时不时更新

// util.js

// 对象转url字符串
var toUrls = function (o) {
  var arr = [];
  for (var p in o) {
    if (o.hasOwnProperty(p)) {
      arr.push(encodeURIComponent(p) + "=" + encodeURIComponent(o[p]));
    }
  }
  return '?' + arr.join("&");
}
/**
 * 精确计算加减,处理精度问题
 * @param {number} arg1 
 * @param {number} arg2 
 */
export const accurateCalc = (arg1 = 0, arg2 = 0, type = 'add') => {
  let result = 0;
  // 计算最大小数位数
  const space1 = arg1.toString().split('.')[1] || 0;
  const space2 = arg2.toString().split('.')[1] || 0;
  const maxSpace = Math.max(space1.length || 0, space2.length || 0);
  // 倍数
  const multiple = Math.pow(10, maxSpace);
  if (type === 'add') { // 加法
    result = Math.round(arg1 * multiple + arg2 * multiple) / multiple;
  } else if (type === 'sub') { // 减法
    result = Math.round(arg1 * multiple - arg2 * multiple) / multiple;
  }
  return result;
}

/**
 * 计算差值
 * @param {num = 0} 计算的数字
 * @param {count = 0} 差值
 */
export const handleCount = (num, count) => {
  return count ? accurateCalc(num, count, 'sub') : accurateCalc(num, Math.abs(count));
}
/**
 * 保留保留整数,向上取整
 * @param {num = 0} 计算的数字
 */
export const toParseNum = (num = 0) => {
  const str = num.toString().split('.');
  return str[1] ? (+str[0]) + 1 : num;
}
/**
 * 保留4位小数,最后一位小叔进1
 * @param {num = 0} 计算的数字
 */
export const toTargetNum = (num = 0) => {
  const str = num.toString().split('.');
  let str1 = str[1] != undefined ? str[1] : '';
  if (str1.length > 4) str1 = +str1.slice(0, 4) + 1;
  return str1 ? +(`${str[0]}.${str1}`) : num;
}
/**
 * 计算星期
 * @param  {String="YYYYMM"} m 年月
 * @return {Array} 周列表
 */
 export const handleWeeks = (m) => {
  // 这个月天数
  const totalDay = moment(m).daysInMonth();

  // 把每天组成YYYYMMDD
  const allMonthData = [];
  for (let i = 0; i < totalDay; i++) {
    const d = i + 1;
    const o = `${m}${d < 10 ? `0${d}` : d}`
    allMonthData.push(o)
  }
  // 判断第一天为周几,然后按周切成数组, 0是周一(汉化后),按中国周一-周日为一周
  let firstDayWeek = moment(allMonthData[0]).weekday();
  const weeks = [];
  function getWeek(days, length) {
    let newWeek = days.splice(0, length);
    weeks.push(newWeek);
    days.length > 7 ? getWeek(days, 7) : weeks.push(days);
  }
  getWeek(allMonthData, 7 - firstDayWeek);
  return weeks;
}
// 周目标汉化枚举
export const numEnum = ["一", "二", "三", "四", "五", "六"];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值