前端项目常用工具方法梳理

时间相关

  • 格式化时间


/**
 * @param { 时间戳 } result
 * @returns 时间戳转换输出xx天xx小时xx分xx秒
 */
const formatSeconds = (result) => {
  const d = Math.floor(result / (60 * 60 * 24));
  const h = Math.floor((result % (60 * 60 * 24)) / (60 * 60));
  const m = Math.floor((result % (60 * 60)) / 60);
  const s = Math.floor(result % 60);
  if (d && h && m && s) {
    return `${d}${'天'}${h}${'小时'}${m}${'分'}${s}${'秒'}`;
  }
  if (h && m && s) {
    return `${h}${'小时'}${m}${'分'}${s}${'秒'}`;
  }
  if (m && s) {
    return `${m}${'分'}${s}${'秒'}`;
  }
  if (s) {
    return `${s}${'秒'}`;
  }
  return '-';
};
  • 获取指定时间的明天时间


/**
 * @param {Date} date 需要进行获取的时间 new Date('2019-09-10')
 * @return {Date} 明天的时间内容 
 */
const getTommorwDay = (date) => {
  let yesterday_milliseconds = date.getTime() + 1000 * 60 * 60 * 24,yesterday = new Date();
  yesterday.setTime(yesterday_milliseconds);
  let year = yesterday.getFullYear(),day = yesterday.getDate(),month = yesterday.getMonth() + 1;
  if (day < 10)day = "0" + day; 
  if (strMonth < 10)strMonth = "0" + strMonth;
  return year + "-" + month + "-" + month;
}
  • 获取指定时间的昨天时间


/**
 * @param {Date} date 需要进行获取的时间
 * @return {Date} 处理以后的昨天时间
 */
const getYestoday = (date) => {
    var yesterday_milliseconds = date.getTime() - 1000 * 60 * 60 * 24,yesterday = new Date();
    yesterday.setTime(yesterday_milliseconds);
    var year = yesterday.getFullYear(),day = yesterday.getDate(),month = yesterday.getMonth() + 1;
    if (day < 10) day = "0" + day;
    if (month < 10)month = "0" + month;
    return year + "-" + month + "-" + day;
}
  • 获取某个月最后一天日


/**
 * @param {String} year 需要获取的年
 * @param {String} month 需要获取的月
 * @return {String} 获取当前年月的最后一天
 */
const getMonthDate = (year,month) => {
    var new_year = year; //取当前的年份
    var new_month = month++; //取下一个月的第一天,方便计算(最后一天不固定)
    if (month > 12) {//如果当前大于12月,则年份转到下一年
        new_month -= 12; //月份减
        new_year++; //年份增
    }
    var new_date = new Date(new_year, new_month, 1); //取当年当月中的第一天
    return new Date(new_date.getTime() - 1000 * 60 * 60 * 24).getDate(); //获取当月最后一天日期
}

数组相关

  • 获取数组中不同的内容


/**
 * @param {Array} arr1 需要进行比对的数组1
 * @param {Array} arr2 需要进行比对的数组2
 * @return {Array} 两个数组中不同的内容
 */
const getArrDifference(arr1, arr2) {
    return arr1.concat(arr2).filter(function(v, i, arr) {
        return arr.indexOf(v) === arr.lastIndexOf(v);
    });
}
  • 素数组去重


/**
 * @param {Array} array 需要进行去重的数组
 * @return {Array} 去重以后的数组
 */
const uniq = (array) => {
    var temp = [];
    for (var i = 0; i < array.length; i++) {
        if (temp.indexOf(array[i]) == -1) {
        temp.push(array[i]);
        }
    }
    return temp;
}
  • 对象数组去重


/**
 * @param {Array} array 需要进行去重的数组
 * @return {Array} 去重以后的数组
 */
const uniqObjArray = (array) => {
    let allArr = [];
    for (var i = 0; i < oldArr.length; i++) {
        var flag = true;
        for (var j = 0; j < allArr.length; j++) {
            if (oldArr[i]["value"] == allArr[j]["value"]) {
                flag = false;
            }
        }
        if (flag)allArr.push(oldArr[i]);
    }
    return allArr;
}
const uniqObjArray = (array) => {
   const res = new Map();
   return arr.filter((arr) => !res.has(arr.name) && res.set(arr.name, 1));
}
/**
 * @param { 原始array数据 } dataList
 * @param { 根据这个key来进行去重 } key
 * @returns
 */
const arrayObjUnique = (dataList, key) => {
  let hasObj = {}
  return dataList.reduce((cur, next) => {
    hasObj[next[key]] ? '' : (hasObj[next[key]] = true && cur.push(next))
    return cur
  }, [])
}
/**
 * @param { 原始array数据 } dataList
 * @param { 根据这个key来进行去重 } key
 * @returns
 */
const arrayObjUnique = (dataList, key) => {
  return dataList.filter((element, index, self) => {
    return self.findIndex(x => x[key] === element[key]) === index
  })
}

对象相关

  • 对象序列化(对象转成url参数)

函数相关

  • 防抖函数


/**
 * @param {function} fn 需要进行防抖处理的函数 
 */
const debounce = (fn) => {
    let timeout = null; // 创建一个标记用来存放定时器的返回值
    return function() {
        clearTimeout(timeout); // 每当用户输入的时候把前一个 setTimeout clear 掉
        timeout = setTimeout(() => {
            fn.apply(this, arguments); //使用apply的原因是为了后续调用不改变this的指向,指向input,而不是window
        }, 500);
    };
}
//默认需要进行处理的函数
const todo = () =>{
    //do something
}
//默认加载初始化
var inp = document.getElementById("inp");
inp.addEventListener("input", debounce(todo));
  • 节流函数


/**
 * @param {function} fn 需要进行处理节流的函数
 */
const throttle = (fn) => {
  let canRun = true;
  return function() {
    if (!canRun) return; 
    canRun = false;
    setTimeout(() => {
      fn.apply(this, arguments);
      canRun = true;
    }, 500);
  };
}
//默认需要进行处理的函数
const todo  = () => {
    //do something
}
//默认初始化进行加载
var inp = document.getElementById("inp");
inp.addEventListener("input", debounce(todo));

浏览器相关

  • 获取浏览器型号


/**
 * @return {String} 浏览器型号 
 */
const getBrowserInfo = () => {
    var Sys = {},ua = navigator.userAgent.toLowerCase(),re = /(msie|firefox|chrome|opera|version).*?([\d.]+)/,m = ua.match(re);
    try {
        Sys.browser = m[1].replace(/version/, "'safari");
        Sys.ver = m[2];
    } catch (e) {
        console.log("getBrowserInfo fail.");
    }
    return Sys;
}
  • 获取浏览器的url参数

/**
 * 默认获取浏览器url中所携带的参数
 * @param {String} v1 需要处理的url[可选参数]
 * @returns {Object} 将所携带的参数处理为对象返回
 */
export const obtainUrlParams = (v1) => {
  const ifurl = v1 || window.location.href
  const urlObj = {}
  if (ifurl.indexOf('?') > -1) {
    const urlMess = ifurl.split('?')[1]
    // urlMess = unescape(urlMess);
    if (urlMess.indexOf('&') > -1) {
      const urlArr = urlMess.split('&')
      for (let i = 0; i < urlArr.length; i++) {
        if (urlArr[i].indexOf('=') > -1) {
          urlObj[urlArr[i].split('=')[0]] = urlArr[i].split('=')[1]
        }
      }
    } else {
      if (urlMess.indexOf('=') > -1) {
        urlObj[urlMess.split('=')[0]] = urlMess.split('=')[1]
      }
    }
  }
  return urlObj
}
  • hash模式下获取地址栏参数(针对授权code获取)

正则相关

  • 校验手机号



  • 校验邮箱



  • 校验身份证

  • 校验车牌

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值