常用的前端的方法函数(还在更新中)

/**
 * 字符串时间转化成时间戳
 * @param {*} str 字符串时间 2022-04-29 00:00:00
 * @returns 时间戳
 */
export function getDateFromString(str) {
  var reg = /^(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/;
  var s = str.match(reg);
  var result = "";
  if (s) {
    result = new Date(s[1], s[2] - 1, s[3], s[4], s[5], s[6]);
  }
  return result;
}

/**
 * 时间戳转日期字符串
 * @param {*} timestamp 时间戳
 * @param {*} formats 时间格式 formats格式包括
 * 1. Y-m-d
 * 2. Y-m-d H:i:s
 * 3. Y年m月d日
 * 4. Y年m月d日 H时i分
 * @returns 日期字符串
 */
export function getMyDate(timestamp, formats) {
  formats = formats || "Y-m-d";
  var zero = function(value) {
    if (value < 10) {
      return "0" + value;
    }
    return value;
  };

  var myDate = timestamp ? new Date(timestamp) : new Date();
  var year = myDate.getFullYear();
  var month = zero(myDate.getMonth() + 1);
  var day = zero(myDate.getDate());
  var hour = zero(myDate.getHours());
  var minite = zero(myDate.getMinutes());
  var second = zero(myDate.getSeconds());

  return formats.replace(/Y|m|d|H|i|s/gi, function(matches) {
    return {
      Y: year,
      m: month,
      d: day,
      H: hour,
      i: minite,
      s: second,
    }[matches];
  });
}

/**
 * 时间戳转字符串
 * @param {*} timeStamp 时间戳
 * @returns yyyy-MM-dd HH:mm:ss 固定格式的日期字符串
 */
export function formatDate(timeStamp) {
  var d = new Date(timeStamp); //创建一个指定的日期对象
  return (
    d.getFullYear() +
    "-" +
    (d.getMonth() + 1) +
    "-" +
    d.getDate() +
    " " +
    d.getHours() +
    ":" +
    d.getMinutes() +
    ":" +
    d.getSeconds()
  );
}

/**
 * 计算日期的天数差
 * @param {*} stime 最小日期
 * @param {*} etime 最大日期
 * @returns 日期的天数差
 */
export function getDayDiff(stime, etime) {
  var begin = getDateFromString(stime);
  var end = getDateFromString(etime);
  var result = (end - begin) / (1000 * 60 * 60 * 24); //计算天
  result = result.toFixed(0);
  return result;
}

/**
 * 获取两日期之间日期数组
 * @param {*} stime 最小日期
 * @param {*} etime 最大日期
 * @returns 两日期之间日期数组
 */
export function getDiffDate(stime, etime) {
  var diffDate = [];
  var i = 0;
  while (stime <= etime) {
    diffDate[i] = stime;
    //获取开始日期时间戳
    var stime_ts = new Date(stime).getTime();
    //增加一天时间戳后的日期
    var next_date = stime_ts + 24 * 60 * 60 * 1000;
    // 时间戳转字符串日期
    stime = getMyDate(next_date);
    i++;
  }
  return diffDate;
}

/**
 * 为空判断
 * @param {*} val 参数
 * @returns 返回true是空/false非空
 */
export function isNull(val) {
  return (
    val === "" ||
    val === null ||
    val === undefined ||
    typeof val === "undefined"
  );
}

/**
 * 通过正则表达式校验参数是否保留小数点后一位
 * @param {*} value 参数
 * @returns 返回true 符合保留小数点后一位/false 不符合
 */
export function checkNumber(value) {
  let reg = new RegExp(/^\d+(\.\d{0,1})?$/);
  if (!isNull(value) && reg.test(value)) {
    return true;
  }
  return false;
}

/**
 * 通过正则表达式校验参数是否为包含0的正整数
 * @param {*} value 参数
 * @returns 返回true 是正整数/false 不是正整数
 */
export function checkNumberInteger(value) {
  let reg = new RegExp(/^([1-9]\d*|[0]{1,1})$/);
  if (!isNull(value) && reg.test(value)) {
    return true;
  }
  return false;
}

/**
 * 16进制转rgb
 * @param {*} value 16进制,#ffffff
 * @returns 颜色的rgb值
 */
export function intRgb(value) {
  // 先将#ffffff分割成['ff','ff','ff']
  let list = [value.slice(1, 3), value.slice(3, 5), value.slice(5, 7)];
  list[0] = parseInt(list[0], 16);
  list[1] = parseInt(list[1], 16);
  list[2] = parseInt(list[2], 16);
  return list.join(",");
}

/**
 * rgb转16进制
 * @param {*} value rgb 224,45,71
 * @returns 颜色的rgb值
 */
export function intSex(value) {
  let list = [];
  list[0] = "#";
  list[1] = parseInt(value.split(",")[0], 10).toString(16);
  list[2] = parseInt(value.split(",")[1], 10).toString(16);
  list[3] = parseInt(value.split(",")[2], 10).toString(16);
  return list.join("");
}

/**
 * 计算是否是闰年
 * @param {*} year 2022
 * @returns 返回true 是闰年/false 不是闰年
 */
export function isLeapYear(year) {
  if ((year % 100 != 0 && year % 4 == 0) || year % 400 == 0) {
    return true;
  } else {
    return false;
  }
}

/**
 * 根据长度截取字符串 每个中文字符计为2位
 * @param value 字符串
 * @param len 固定长度
 * @param withOmit 是否填补... false不填补
 * @return 字符串
 */
export function stringLenFunction(str, len, withOmit) {
  var strLen = 0;
  for (var i = 0; i < str.length; i++) {
    var c = str.charCodeAt(i);
    //单字节加1
    if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
      strLen++;
    } else {
      strLen += 2;
    }
    if (strLen > len) {
      if (withOmit) {
        return str.substr(0, i) + "...";
      } else {
        return str.substr(0, i);
      }
    }
  }
  return str;
}


扁平化数据例子
list: [
  { label: "浙江省", level: 0, PId: 0, code: 330000 },
  { label: "杭州市", level: 1, PId: 330000, code: 330100 },
  { label: "宁波市", level: 1, PId: 330000, code: 330200 },
  { label: "温州市", level: 1, PId: 330000, code: 330300 },
  { label: "嘉兴市", level: 1, PId: 330000, code: 330400 },
  { label: "湖州市", level: 1, PId: 330000, code: 330500 },
  { label: "上城区", level: 2, PId: 330100, code: 330102 },
  { label: "下城区", level: 2, PId: 330100, code: 330103 },
  { label: "江干区", level: 2, PId: 330100, code: 330104 },
  { label: "河南省", level: 0, PId: 0, code: 410000 },
  { label: "郑州市", level: 1, PId: 410000, code: 410100 },
  { label: "开封市", level: 1, PId: 410000, code: 410200 },
  { label: "陕西省", level: 0, PId: 0, code: 715200 },
  { label: "西安市", level: 1, PId: 715200, code: 715201 },
  { label: "咸阳市", level: 1, PId: 715200, code: 715202 },
  { label: "宝鸡市", level: 1, PId: 715200, code: 715203 },
  { label: "铜川市", level: 1, PId: 715200, code: 715204 },
  { label: "渭南市", level: 1, PId: 715200, code: 715205 },
  { label: "延安市", level: 1, PId: 715200, code: 715206 },
  { label: "澄城县", level: 2, PId: 715205, code: 715250 },
  { label: "富平县", level: 2, PId: 715205, code: 715250 },
  { label: "蒲城县", level: 2, PId: 715205, code: 715250 },
]

/**
 * 将扁平化数据处理为树形数据
 * 当前的PId等于父级的code
 * @param data 扁平化数据数组
 * @return 树形数组
 */
export function listToTree(data) {
  return data.filter((parentItem) => {
    // 每一级的数据filterD
    const filterD = data.filter((item) => {
      return parentItem.code === item.PId;
    });
    //
    // 取filterD长度大于0 的
    filterD.length > 0 ? (parentItem.children = filterD) : "";
    // 只取PId为0的,也就是最顶层
    return parentItem.PId === 0;
  });
}

/**
 * 将树形数据处理为扁平化数据(多级) 用递归
 * @param {*} data 树形数组
 * @returns 扁平化数据数组
 */
export function treeToList(data) {
  var list = [];
  const funChild = (childData) => {
    childData.forEach((element) => {
      element.children && element.children.length > 0
        ? funChild(element.children)
        : ""; //子级递归
      delete element.children;//删除children 根据需求看是否需要删除
      list.push(element);
    });
  };
  funChild(data);
  return list;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值