前端开发常用的方法封装(二)

简介: 将阿拉伯数字翻译成中文的大写数字、将数字转换为大写金额、 判断一个元素是否在数组中和数组排序等......

1.将阿拉伯数字翻译成中文的大写数字

export const numberToChinese = (num) => {
   
  let AA = new Array(
    "零",
    "一",
    "二",
    "三",
    "四",
    "五",
    "六",
    "七",
    "八",
    "九",
    "十"
  );
  let BB = new Array("", "十", "百", "仟", "萬", "億", "点", "");
  let a = ("" + num).replace(/(^0*)/g, "").split("."),
    k = 0,
    re = "";
  for (let i = a[0].length - 1; i >= 0; i--) {
   
    switch (k) {
   
      case 0:
        re = BB[7] + re;
        break;
      case 4:
        if (!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$").test(a[0]))
          re = BB[4] + re;
        break;
      case 8:
        re = BB[5] + re;
        BB[7] = BB[5];
        k = 0;
        break;
    }
    if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0)
      re = AA[0] + re;
    if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re;
    k++;
  }

  if (a.length > 1) {
   
    // 加上小数部分(如果有小数部分)
    re += BB[6];
    for (let i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)];
  }
  if (re == "一十") re = "十";
  if (re.match(/^一/) && re.length == 3) re = re.replace("一", "");
  return re;
};

2.将数字转换为大写金额

export const changeToChinese = (Num) => {
   
  //判断如果传递进来的不是字符的话转换为字符
  if (typeof Num == "number") {
   
    Num = new String(Num);
  }
  Num = Num.replace(/,/g, ""); //替换tomoney()中的“,”
  Num = Num.replace(/ /g, ""); //替换tomoney()中的空格
  Num = Num.replace(/¥/g, ""); //替换掉可能出现的¥字符
  if (isNaN(Num)) {
   
    //验证输入的字符是否为数字
    //alert("请检查小写金额是否正确");
    return "";
  }
  //字符处理完毕后开始转换,采用前后两部分分别转换
  let part = String(Num).split(".");
  let newchar = "";
  //小数点前进行转化
  for (let i = part[0].length - 1; i >= 0; i--) {
   
    if (part[0].length > 10) {
   
      return "";
      //若数量超过拾亿单位,提示
    }
    let tmpnewchar = "";
    let perchar = part[0].charAt(i);
    switch (perchar) {
   
      case "0":
        tmpnewchar = "零" + tmpnewchar;
        break;
      case "1":
        tmpnewchar = "壹" + tmpnewchar;
        break;
      case "2":
        tmpnewchar = "贰" + tmpnewchar;
        break;
      case "3":
        tmpnewchar = "叁" + tmpnewchar;
        break;
      case "4":
        tmpnewchar = "肆" + tmpnewchar;
        break;
      case "5":
        tmpnewchar = "伍" + tmpnewchar;
        break;
      case "6":
        tmpnewchar = "陆" + tmpnewchar;
        break;
      case "7":
        tmpnewchar = "柒" + tmpnewchar;
        break;
      case "8":
        tmpnewchar = "捌" + tmpnewchar;
        break;
      case "9":
        tmpnewchar = "玖" + tmpnewchar;
        break;
    }
    switch (part[0].length - i - 1) {
   
      case 0:
        tmpnewchar = tmpnewchar + "元";
        break;
      case 1:
        if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
        break;
      case 2:
        if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
        break;
      case 3:
        if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
        break;
      case 4:
        tmpnewchar = tmpnewchar + "万";
        break;
      case 5:
        if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
        break;
      case 6:
        if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
        break;
      case 7:
        if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
        break;
      case 8:
        tmpnewchar = tmpnewchar + "亿";
        break;
      case 9:
        tmpnewchar = tmpnewchar + "拾";
        break;
    }
    let newchar = tmpnewchar + newchar;
  }
  //小数点之后进行转化
  if (Num.indexOf(".") != -1) {
   
    if (part[1].length > 2) {
   
      // alert("小数点之后只能保留两位,系统将自动截断");
      part[1] = part[1].substr(0, 2);
    }
    for (i = 0; i < part[1].length; i++) {
   
      tmpnewchar = "";
      perchar = part[1].charAt(i);
      switch (perchar) {
   
        case "0":
          tmpnewchar = "零" + tmpnewchar;
          break;
        case "1":
          tmpnewchar = "壹" + tmpnewchar;
          break;
        case "2":
          tmpnewchar = "贰" + tmpnewchar;
          break;
        case "3":
          tmpnewchar = "叁" + tmpnewchar;
          break;
        case "4":
          tmpnewchar = "肆" + tmpnewchar;
          break;
        case "5":
          tmpnewchar = "伍" + tmpnewchar;
          break;
        case "6":
          tmpnewchar = "陆" + tmpnewchar;
          break;
        case "7":
          tmpnewchar = "柒" + tmpnewchar;
          break;
        case "8":
          tmpnewchar = "捌" + tmpnewchar;
          break;
        case "9":
          tmpnewchar = "玖" + tmpnewchar;
          break;
      }
      if (i == 0) tmpnewchar = tmpnewchar + "角";
      if (i == 1) tmpnewchar = tmpnewchar + "分";
      newchar = newchar + tmpnewchar;
    }
  }
  //替换所有无用汉字
  while (newchar.search("零零") != -1) newchar = newchar.replace("零零", "零");
  newchar = newchar.replace("零亿", "亿");
  newchar = newchar.replace("亿万", "亿");
  newchar = newchar.replace("零万", "万");
  newchar = newchar.replace("零元", "元");
  newchar = newchar.replace("零角", "");
  newchar = newchar.replace("零分", "");
  if (newchar.charAt(newchar.length - 1) == "元") {
   
    newchar = newchar + "整";
  }
  return newchar;
};

3. 判断一个元素是否在数组中和数组排序

export const contains = (arr, val) => {
   
  return arr.indexOf(val) != -1 ? true : false;
};
// 数组排序
// {type} 1:从小到大 2:从大到小 3:随机
export const sort = (arr, type = 1) => {
   
  return arr.sort((a, b) => {
   
    switch (type) {
   
      case 1:
        return a - b;
      case 2:
        return b - a;
      case 3:
        return Math.random() - 0.5;
      default:
        return arr;
    }
  });
};

4.数组去重

export const unique = (arr) => {
   
  if (Array.hasOwnProperty("from")) {
   
    return Array.from(new Set(arr));
  } else {
   
    let n = {
   },
      r = [];
    for (let i = 0; i < arr.length; i++) {
   
      if (!n[arr[i]]) {
   
        n[arr[i]] = true;
        r.push(arr[i]);
      }
    }
    return r;
  }
};

5.求两个集合的并集和求两个集合的交集


// 求两个集合的并集
export const union = (a, b) => {
   
  let newArr = a.concat(b);
  return this.unique(newArr);
};

// 求两个集合的交集
export const intersect = (a, b) => {
   
  let _this = this;
  a = this.unique(a);
  return this.map(a, function (o) {
   
    return _this.contains(b, o) ? o : null;
  });
};

6.删除其中一个元素、将类数组转换为数组、最大值、最小值、求和、平均值

// 删除其中一个元素
export const remove = (arr, ele) => {
   
  let index = arr.indexOf(ele);
  if (index > -1) {
   
    arr.splice(index, 1);
  }
  return arr;
};
// 将类数组转换为数组
export const formArray = (ary) => {
   
  let arr = [];
  if (Array.isArray(ary)) {
   
    arr = ary;
  } else {
   
    arr = Array.prototype.slice.call(ary);
  }
  return arr;
};
// 最大值
export const max = (arr) => {
   
  return Math.max.apply(null, arr);
};
// 最小值
export const min = (arr) => {
   
  return Math.min.apply(null, arr);
};
//求和
export const sum = (arr) => {
   
  return arr.reduce((pre, cur) => {
   
    return pre + cur;
  });
};
//平均值
export const average = (arr) => {
   
  return this.sum(arr) / arr.length;
};

7.去除空格

// type: 1-所有空格 2-前后空格 3-前空格 4-后空格
export const trim = (str, type) => {
   
  type = type || 1;
  switch (type) {
   
    case 1:
      return str.replace(/\s+/g, "");
    case 2:
      return str.replace(/(^\s*)|(\s*$)/g, "");
    case 3:
      return str.replace(/(^\s*)/g, "");
    case 4:
      return str.replace(/(\s*$)/g, "");
    default:
      return str;
  }
};

8.字符替换

// type: 1:首字母大写 2:首字母小写 3:大小写转换 4:全部大写 5:全部小写
export const changeCase = (str, type) => {
   
  type = type || 4;
  switch (type) {
   
    case 1:
      return str.replace(/\b\w+\b/g, function (word) {
   
        return (
          word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase()
        );
      });
    case 2:
      return str.replace(/\b\w+\b/g, function (word) {
   
        return (
          word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase()
        );
      });
    case 3:
      return str
        .split("")
        .map(function (word) {
   
          if (/[a-z]/.test(word)) {
   
            return word.toUpperCase();
          } else {
   
            return word.toLowerCase();
          }
        })
        .join("");
    case 4:
      return str.toUpperCase();
    case 5:
      return str.toLowerCase();
    default:
      return str;
  }
};

9.检测密码强度

export const checkPwd = (str) => {
   
  let Lv = 0;
  if (str.length < 6) {
   
    return Lv;
  }
  if (/[0-9]/.test(str)) {
   
    Lv++;
  }
  if (/[a-z]/.test(str)) {
   
    Lv++;
  }
  if (/[A-Z]/.test(str)) {
   
    Lv++;
  }
  if (/[\.|-|_]/.test(str)) {
   
    Lv++;
  }
  return Lv;
};

10. 函数节流器

export const debouncer = (fn, time, interval = 200) => {
   
  if (time - (window.debounceTimestamp || 0) > interval) {
   
    fn && fn();
    window.debounceTimestamp = time;
  }
};

11.在字符串中插入新字符串

export const insertStr = (soure, index, newStr) => {
   
  let str = soure.slice(0, index) + newStr + soure.slice(index);
  return str;
};

12.判断两个对象是否键值相同

export const isObjectEqual = (a, b) => {
   
  let aProps = Object.getOwnPropertyNames(a);
  let bProps = Object.getOwnPropertyNames(b);

  if (aProps.length !== bProps.length) {
   
    return false;
  }

  for (let i = 0; i < aProps.length; i++) {
   
    let propName = aProps[i];

    if (a[propName] !== b[propName]) {
   
      return false;
    }
  }
  return true;
};

13.16进制颜色转RGBRGBA字符串

export const colorToRGB = (val, opa) => {
   
  let pattern = /^(#?)[a-fA-F0-9]{6}$/; //16进制颜色值校验规则
  let isOpa = typeof opa == "number"; //判断是否有设置不透明度

  if (!pattern.test(val)) {
   
    //如果值不符合规则返回空字符
    return "";
  }

  let v = val.replace(/#/, ""); //如果有#号先去除#号
  let rgbArr = [];
  let rgbStr = "";

  for (let i = 0; i < 3; i++) {
   
    let item = v.substring(i * 2, i * 2 + 2);
    let num = parseInt(item, 16);
    rgbArr.push(num);
  }

  rgbStr = rgbArr.join();
  rgbStr =
    "rgb" + (isOpa ? "a" : "") + "(" + rgbStr + (isOpa ? "," + opa : "") + ")";
  return rgbStr;
};

14.追加url参数

export const appendQuery = (url, key, value) => {
   
  let options = key;
  if (typeof options == "string") {
   
    options = {
   };
    options[key] = value;
  }
  options = $.param(options);
  if (url.includes("?")) {
   
    url += "&" + options;
  } else {
   
    url += "?" + options;
  }
  return url;
};
目录
相关文章
|
21天前
|
存储 前端开发 JavaScript
前端的全栈之路Meteor篇(四):RPC方法注册及调用-更轻量的服务接口提供方式
RPC机制通过前后端的`callAsync`方法实现了高效的数据交互。后端通过`Meteor.methods()`注册方法,支持异步操作;前端使用`callAsync`调用后端方法,代码更简洁、易读。本文详细介绍了Methods注册机制、异步支持及最佳实践。
|
2月前
|
前端开发 JavaScript
前端基础(九)_this基本使用、this指向判断、改变this指向的方法
本文介绍了JavaScript中this的基本使用、this指向的判断以及改变this指向的方法。
44 1
前端基础(九)_this基本使用、this指向判断、改变this指向的方法
|
2月前
|
前端开发
前端基础(十四)_隐藏元素的方法
本文介绍了几种在前端开发中隐藏元素的方法,包括使用`display:none`、`visibility:hidden`、`opacity:0`等CSS属性,并提供了相应的示例代码。此外,还提到了其他隐藏元素的技巧,如通过设置元素位置、使用`overflow`属性和`filter`属性以及`rgba`颜色值来实现元素的隐藏。
64 1
前端基础(十四)_隐藏元素的方法
|
1月前
|
前端开发 JavaScript
掌握微前端架构:构建现代Web应用的新方法
本文介绍了微前端架构的概念及其在现代Web应用开发中的优势与实施方法。微前端架构通过将应用拆分成独立模块,提升了开发效率和灵活性。其核心优势包括技术栈灵活性、独立部署、团队协作及易于维护。文章详细阐述了定义边界、选择框架、管理状态和通信等关键步骤,并讨论了状态同步、样式隔离及安全性等挑战。微前端架构有望成为未来Web开发的重要趋势。
|
28天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
129 0
|
28天前
|
存储 前端开发 API
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
88 0
|
2月前
|
前端开发
前端基础(十一)_Float浮动、清除浮动的几种方法
本文介绍了浮动的概念、属性、特性以及清除浮动的几种方法,并通过实例演示了如何使用CSS实现元素的浮动和处理浮动带来的问题。
73 3
|
1月前
|
前端开发
前端常用方法防抖(debounce)和节流(throttle)的示例演示及应用场景说明
前端常用方法防抖(debounce)和节流(throttle)的示例演示及应用场景说明
21 0
|
2月前
|
前端开发 JavaScript
前端ES5 | js —添加元素方法
前端ES5 | js —添加元素方法
|
3月前
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
64 0