js 日常编程工具函数

js 分享一些简洁的处理日常工具函数。

文章目录

  • js 分享一些简洁的处理日常工具函数。
    • 字符串类
      • 反转字符串
      • 字符串去重
      • 查找给定单词,并且替换为另一词汇
      • 将字符串中所有单词的首字母大写
      • 字符串转换为一个单词数组
      • 随机产生一个十六进制的值
      • url 参数解析
      • 字符串超出长度中间增加...切片
    • 数值类
      • 返回给定数的平均数
      • 返回给定数的和
      • 数字进行有效性验证
      • 将 RGB 模式下的颜色转换为十六进制
      • 生成指定区间的随机整数
      • 斐波拉数列
    • 数组类
      • 输出数组中所有的奇数
      • 返回一个数组的最大值
      • 检查数组的所有项是否相等
      • 移除数组中的 false 值,包括 false,undefined, NaN 和 empty。
      • 移除数组中的重复项
      • 数组去重(相同对象去重)
      • 数组任意两个值的和是否等于 k
      • 数组扁平化
      • 打乱数组
    • 对象类
      • 判断对象的值是不是全为空
      • 判断两个对象(包括数组)是否相等
      • 深拷贝, 浅拷贝
    • 其它类
      • 检查给定的字符串是否为有效的 JSON
      • 页面的底部,而你想要快速滚动到页面顶部
      • 返回两个日期之间的天数差
      • 从日期对象返回字符串时间
      • 阿拉伯数字转换成大写汉字

字符串类

反转字符串

export function reverseString(str) {
  return [...str].reverse().join("");
}
//示例
let str = reverseString("hello");
console.log(str); //olleh

字符串去重

export function stringFilter(str) {
  return [...new Set(Array.from(str))].join("");
}
//示例
let str = stringFilter("apple");
console.log(str); //'aple'

查找给定单词,并且替换为另一词汇

export function findAndReplace(str, wordToFind, wordToReplace) {
  return str.split(wordToFind).join(wordToReplace);
}
//示例
let result = findAndReplace("I like banana", "banana", "apple");
console.log(result); //I like apple

将字符串中所有单词的首字母大写

export function capitalizeAllWords(str) {
  return str.replace(/\b[a-z]/g, (char) => char.toUpperCase());
}
//示例
let str = capitalizeAllWords("i love reading book");
console.log(str); //I Love Reading Book

字符串转换为一个单词数组

export function toWords(str, parent = /[^a-zA-Z-]+/) {
  return str.split(parent).filter((item) => item);
}
//示例
let words = toWords("I want to be come a great programmer");
console.log(words); //['I', 'want', 'to', 'be', 'come', 'a', 'great', 'programmer']

随机产生一个十六进制的值

export function getColor() {
  return (
    "#" +
    "0123456789abcdef"
      .split("")
      .map((v, i, a) => {
        return i > 5 ? null : a[Math.floor(Math.random() * 16)];
      })
      .join("")
  );
}
//示例
console.log(getColor()); //'#2ebe3e'

url 参数解析

export function urlParse(url) {
  let obj = {};
  let reg = /[?&][^?&]+=[^?&]+/g;
  let arr = url.match(reg);
  if (arr) {
    arr.forEach((item) => {
      let tempArr = item.substring(1).split("=");
      console.log(tempArr);
      let key = tempArr[0];
      let val = tempArr[1];
      obj[key] = val;
    });
  }
  return obj;
}
//示例
console.log(urlParse("https://mp.csdn.net?id=123456&a=b")); //{id:"123456",a:"b"}

字符串超出长度中间增加…切片

export function strEllipsis(str, maxLength) {
  // 字符串长度小于等于 maxLength,无需截断,直接返回原字符串
  if (str.length <= maxLength) return str;
  const ellipsis = "...";
  const halfLength = Math.floor((maxLength - ellipsis.length) / 2);
  const start = str.slice(0, halfLength);
  const end = str.slice(str.length - halfLength);
  return start + ellipsis + end; // 使用省略号连接前半部分和后半部分
}
//示例
console.log(strEllipsis("abcdefg", 5)); //'a...g'

数值类

返回给定数的平均数

export function averageOf(...numbers) {
  return numbers.reduce((a, b) => a + b, 0) / numbers.length;
}
//示例
let average = averageOf(5, 2, 4, 7);
console.log(average); //4.5

返回给定数的和

export function sumOf(...nums) {
  return nums.reduce((a, b) => a + b, 0);
}

//示例
let sum = sumOf(5, -3, 2, 1);
console.log(sum); //5

数字进行有效性验证

export function isValidNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n) && Number(n) === n;
}

//示例
let check = isValidNumber("a");
console.log(check); //false

将 RGB 模式下的颜色转换为十六进制

export function RGBTOHex(r, g, b) {
  return ((r << 16) + (g << 8) + b).toString(16).padStart(6, "0");
}

//示例
let hex = RGBTOHex(255, 255, 255);
console.log(hex); //ffffff

生成指定区间的随机整数

export function randomNum(min, max) {
  return Math.floor(Math.random() * (max - min) + min);
}

//示例
let num = randomNum(2, 10);
console.log(num); //5

斐波拉数列

export function fibonacci(len) {
  var arr = [];
  if (isNaN(len) || len < 0) {
    console.log("输入有误");
  } else {
    for (var i = 0; i < len; i++) {
      if (i === 0 || i === 1) {
        arr[i] = 1;
      } else {
        arr[i] = arr[i - 1] + arr[i - 2];
      }
    }
  }
  return arr;
}

//示例
console.log(fibonacci(10)); //[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

数组类

输出数组中所有的奇数

export function outputOdd(arr) {
  return arr.filter((number) => number % 2 !== 0);
}
//示例
let oddNumbers = outputOdd([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
console.log(oddNumbers); // 输出: [1, 3, 5, 7, 9]

返回一个数组的最大值

export function maxItemOfArray(arr) {
  return Math.max(...arr);
  //   return [...arr].sort((a, b) => b - a).slice(0, 1)[0];
}
//示例
let maxItem = maxItemOfArray([3, 5, 16, 89]);
console.log(maxItem); //89

检查数组的所有项是否相等

export function areAllEqual(arr) {
  return arr.every((item) => item === arr[0]);
}
//示例
let cehek = areAllEqual([3, 3, 3]);
console.log(cehek); //true

移除数组中的 false 值,包括 false,undefined, NaN 和 empty。

export function removeFalseValues(arr) {
  return arr.filter((item) => item);
}
//示例
let arr = removeFalseValues([3, "", false, undefined, NaN]);
console.log(arr); //[3]

移除数组中的重复项

export function removeDuplicatedValues(arr) {
  return [...new Set(arr)];
}
//示例
let arr = removeDuplicatedValues([5, 3, 2, 5, 6, 1, 1, 6]);
console.log(arr); //[5,3,2,6,1]

数组去重(相同对象去重)

export function filterArrById(arr) {
  let obj = {};
  let newArr = arr.reduce((cur, next) => {
    if (next) {
      obj[next.id] ? "" : (obj[next.id] = true && cur.push(next));
    }
    return cur;
  }, []);
  return newArr;
}
//示例
let arr = filterArrById([
  { id: "11", value: 11 },
  { id: "11", value: 11 },
  { id: "22", value: 22 },
  { id: "22", value: 22 },
]);
console.log(arr); //[{ "id": "11", "value": 11 }, { "id": "22", "value": 22 }]

数组任意两个值的和是否等于 k

export function twoNumTotal(arr, k) {
  for (var i = 0; i < arr.length; i++) {
    for (var j = 0; j < i; j++) {
      if (arr[i] + arr[j] == k) {
        console.log("两个和有这个k");
        return true;
      }
    }
  }
  console.log("两个和没有这个k");
  return false;
}
//示例
let result = twoNumTotal([1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 44, 55], 6);
console.log(result); //true

数组扁平化

export function flatten(arr) {
  return arr.reduce(
    (prev, item) => prev.concat(Array.isArray(item) ? flatten(item) : item),
    []
  );
  //另一种写法
  //return arr.flat(Infinity);
}
//示例
let arr = flatten([1, [2, 3, [4, 5, 6, [7, 8, 9]]]]);
console.log(arr); //[1, 2, 3, 4, 5, 6, 7, 8, 9]

打乱数组

// 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0
export function randomArray(array = []) {
  return array.sort(() => Math.random() - 0.5);
}

对象类

判断对象的值是不是全为空

export function areAllValuesEmpty(obj) {
  return Object.values(obj).every(
    (value) => value === null || value === undefined || value === ""
  );
}

// 示例用法
const result = areAllValuesEmpty({ a: "", b: null, c: undefined });
console.log(result); // true

判断两个对象(包括数组)是否相等

// 判断两个对象(包括数组)是否相等
export function 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];
    let propA = a[propName];
    let propB = b[propName];
    if (typeof propA === "object") {
      if (!this.isObjectEqual(propA, propB)) {
        return false;
      }
    } else if (propA !== propB) {
      return false;
    }
  }
  return true;
}

深拷贝, 浅拷贝

/**
 * @param {Object} obj 传过来要克隆的对象
 * @param {Boolean} deep  是否深度克隆
 */
export function clonePlugin(obj, deep) {
  if (Array.isArray(obj)) {
    if (deep) {
      //数组的深克隆;
      var newArr = [];
      for (var i = 0; i < obj.length; i++) {
        newArr.push(clonePlugin(obj[i], deep));
      }
      return newArr;
    } else {
      //判断是否是数组,是数组直接复制数组,返回数组
      return obj.slice();
    }
  } else if (typeof obj === "object") {
    var newObj = {};
    for (var prop in obj) {
      if (deep) {
        //使用递归的方式,遍历的时候进行每一个引用类的值深克隆
        newObj[prop] = clonePlugin(obj[prop], deep);
      } else {
        newObj[prop] = obj[prop];
      }
    }
    return newObj;
  } else {
    // 函数  原始类型
    return obj;
  }
}

其它类

检查给定的字符串是否为有效的 JSON

export function isValidJSON(str) {
  try {
    JSON.parse(str);
    return true;
  } catch (err) {
    return false;
  }
}

// 示例用法
let chech1 = isValidJSON('{'title':"javascript",'price':14}');  //true

页面的底部,而你想要快速滚动到页面顶部

export function scrollToTop() {
  const t = document.documentElement.scrollTop || document.body.scrollTop;
  if (t > 0) {
    window.requestAnimationFrame(scrollToTop);
    window.scrollTo(0, t - t / 8);
  }
}

返回两个日期之间的天数差

export function getDayDiff(date1, date2) {
  return (date1 - date2) / (1000 * 3600 * 24);
}
// 示例用法
let diff = getDayDiff(new Date("2020-04-01"), new Date("2020-08-15")); //136

从日期对象返回字符串时间

export function getTimeFromDate(date) {
  return date.toTimeString().slice(0, 8);
}

// 示例用法
let time = getTimeFromDate(new Date()); //09:46:08

阿拉伯数字转换成大写汉字

export function numberParseChina(money) {
  //汉字的数字
  var cnNums = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
  //基本单位
  var cnIntRadice = ["", "拾", "佰", "仟"];
  //对应整数部分扩展单位
  var cnIntUnits = ["", "万", "亿", "兆"];
  //对应小数部分单位
  var cnDecUnits = ["角", "分", "毫", "厘"];
  //整数金额时后面跟的字符
  var cnInteger = "整";
  //整型完以后的单位
  var cnIntLast = "圆";
  //最大处理的数字
  var maxNum = 999999999999999.9999;
  //金额整数部分
  var integerNum;
  //金额小数部分
  var decimalNum;
  //输出的中文金额字符串
  var chineseStr = "";
  //分离金额后用的数组,预定义
  var parts;
  if (money == "") {
    return "";
  }
  money = parseFloat(money);
  if (money >= maxNum) {
    //超出最大处理数字
    return "";
  }
  if (money == 0) {
    chineseStr = cnNums[0] + cnIntLast + cnInteger;
    return chineseStr;
  }
  //转换为字符串
  money = money.toString();
  if (money.indexOf(".") == -1) {
    integerNum = money;
    decimalNum = "";
  } else {
    parts = money.split(".");
    integerNum = parts[0];
    decimalNum = parts[1].substr(0, 4);
  }
  //获取整型部分转换
  if (parseInt(integerNum, 10) > 0) {
    var zeroCount = 0;
    var IntLen = integerNum.length;
    for (var i = 0; i < IntLen; i++) {
      var n = integerNum.substr(i, 1);
      var p = IntLen - i - 1;
      var q = p / 4;
      var m = p % 4;
      if (n == "0") {
        zeroCount++;
      } else {
        if (zeroCount > 0) {
          chineseStr += cnNums[0];
        }
        //归零
        zeroCount = 0;
        chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
      }
      if (m == 0 && zeroCount < 4) {
        chineseStr += cnIntUnits[q];
      }
    }
    chineseStr += cnIntLast;
  }
  //小数部分
  if (decimalNum != "") {
    var decLen = decimalNum.length;
    for (var i = 0; i < decLen; i++) {
      var n = decimalNum.substr(i, 1);
      if (n != "0") {
        chineseStr += cnNums[Number(n)] + cnDecUnits[i];
      }
    }
  }
  if (chineseStr == "") {
    chineseStr += cnNums[0] + cnIntLast + cnInteger;
  } else if (decimalNum == "") {
    chineseStr += cnInteger;
  }
  return chineseStr;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/583244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; class Solution:def myPow(self, x: float, n: int) -> float:def quickMul(N):ans 1.0# 贡献的初始值为 xx_contribute x# 在对 N 进行二进制拆分的同时计算答案while N > 0:if N % 2 1:# 如果 N 二进制表示的最低位为 1&#xf…

新手一文掌握 ea怎么注册?ea官网注册账号的详细教程

新手一文掌握 ea怎么注册&#xff1f;ea官网注册账号的详细教程 知名游戏平台EA平台&#xff0c;说到这个各位游戏玩家肯定不会陌生是全球知名的互动娱乐软件公司美国艺电&#xff08;Electronic Arts&#xff09;旗下的游戏平台。该平台主营电子游戏的开发、出版和销售业务&…

万兆以太网MAC设计(10)UDP协议解析以及模块设计

文章目录 前言&#xff1a;UDP报文格式一、UDP模块设计二、仿真总结&#xff1a; 前言&#xff1a;UDP报文格式 参考&#xff1a;https://sunyunqiang.com/blog/udp_protocol/ UDP (User Datagram Protocol) 是常用的传输层协议之一, 它向应用层提供无连接, 不可靠, 尽最大努力…

GitHub Copilot申请和使用

GitHub Copilot申请和使用 文章目录 前言一、申请二、使用总结 前言 之前已经成功进行了Github学生认证&#xff0c;今天邮件通知之前的学生认证已经通过。那么就去进行GitHub Copilot申请和使用。 前面准备&#xff1a;Github学生认证 一、申请 进入github的settings&#x…

上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了如何在树莓派4b上面开发qt&#xff0c;也学习了如何用/etc/rc.local启动控制台程序&#xff0c;那今天我们继续学习一下如何利用树莓…

selenium 4.x 验证码处理(python)

验证码处理 一般情况公司如果涉及web自动化测试需要对验证码进行处理的方式一般有一下几种&#xff1a; 关闭验证码功能&#xff08;开发处理&#xff09;设置万能验证码&#xff08;开发处理&#xff09;使用智能识别库进行验证 通过第三方打码平台识别验证码 1. 跳过验证功…

视频转换过程中的几个基本注意事项

1.迟滞 海康的摄像头迟滞大概会到1秒的量级&#xff0c;一般如果你自己搭个框架做转发&#xff0c;迟滞有时会达到20秒&#xff0c;这是为什么呢&#xff1f;请看例程&#xff1a; class VideoCamera(object):def __init__(self):# 打开系统默认摄像头self.cap cv2.VideoCaptu…

看看大家都在做哪些有趣的项目

最近发现两个比较有趣的项目 1.中国独立开发者项目列表 该项目旨在聚合中国独立开发者的项目&#xff0c;分享开发者们正在进行的工作&#xff0c;项目列表包括网站或 App&#xff0c;并且正在持续更新中 项目分为程序员版和主版面&#xff1a; 程序员版&#xff1a;用户是程…

docker compose安装redis

一、安装准备 在docker hub查看redis镜像版本。查看地址如下&#xff1a; Dockerhttps://hub-stage.docker.com/_/redis/tags 二、拉取docker镜像 我这里用redis:6.2.14版本&#xff0c;先拉取镜像。命令如下&#xff1a; docker pull redis:6.2.14 查看刚刚下载的镜像&am…

M2 Mac mini跑Llama3

前言 在4-19左右&#xff0c;Meta 宣布正式推出下一代开源大语言模型 Llama 3&#xff1b;共包括 80 亿和 700 亿参数两种版本&#xff0c;号称 “是 Llama 2 的重大飞跃”&#xff0c;并为这些规模的 LLM 确立了新的标准。实际上笔者早就体验过&#xff0c;只不过自己电脑没什…

nuxt3使用记录五:禁用莫名其妙的Tailwind CSS(html文件大大减小)

发现这个问题是因为&#xff0c;今天我突然很好奇&#xff0c;我发现之前构建的自动产生的200.html和404.html足足290k&#xff0c;怎么这么大呢&#xff1f;不是很占用我带宽&#xff1f; 一个啥东西都没有的静态页面&#xff0c;凭啥这么大&#xff01;所以我就想着手动把他…

matlab新手快速上手6(引力搜索算法)

本文根据一个较为简单的matlab引力搜索算法框架详细分析蚁群算法的实现过程&#xff0c;对matlab新手友好&#xff0c;源码在文末给出。 引力搜索算法简介&#xff1a; 引力搜索算法是一种启发式优化算法&#xff0c;最初于2009年由伊朗的Esmat Rashedi、Hossein Nezamabadi-p…

MyBatis(注解方式操作)

文章目录 1.注解方式操作文件目录1.快速入门&#xff08;完整步骤&#xff09;1.pom.xml&#xff08;完整&#xff09;2.resources/jdbc.properties外部配置文件&#xff08;根据实际情况修改参数&#xff09;3.在resources/mybatis-config.xml&#xff08;完整&#xff09;中配…

Linux基本指令(3)

目录 时间相关的指令&#xff1a; 1.在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加好后接数个标记&#xff0c;其中常用的标记列表如下&#xff1a; 2.在设定时间方面&#xff1a; 3.时间戳&#xff1a; Cal指令&#xff1a; find指令&a…

韩国云主机安装AMP环境要求科普

AMP环境&#xff0c;即Apache、MySQL和PHP的组合&#xff0c;是许多网站开发者和运维人员常用的环境配置。在韩国云主机上安装AMP环境&#xff0c;需要满足一定的要求以确保顺利运行和高效性能。下面我们将对韩国云主机安装AMP环境的要求进行科普。 首先&#xff0c;韩国云主机…

深入探索MySQL锁机制:揭秘死锁原因与RC隔离级别下的事务处理

MySQL锁的类型及死锁概述 在数据库系统中&#xff0c;为了保证事务可以正确地访问数据&#xff0c;防止数据不一致&#xff0c;通常会使用锁机制。MySQL作为广泛使用的数据库之一&#xff0c;其InnoDB存储引擎提供了多种锁类型&#xff0c;主要包括行锁&#xff08;Record Loc…

每日一题(力扣55):跳跃游戏--贪心

刚开始像这道题&#xff0c;想的是这么从当前可以走的那几步中选择一步&#xff0c;所以一坨屎一样的代码 class Solution { public:bool canJump(vector<int>& nums) {int nnums.size();int step0;int u0;int u_max0;int step_size0;int max_size0;int loci0;while…

机器学习-11-卷积神经网络-基于paddle实现神经网络

文章目录 总结参考本门课程的目标机器学习定义第一步&#xff1a;数据准备第二步&#xff1a;定义网络第三步&#xff1a;训练网络第四步&#xff1a;测试训练好的网络 总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍基于paddle实现神经网络。 参考 MNIST 训练_副…

FreeRTOS:3.信号量

FreeRTOS信号量 参考链接&#xff1a;FreeRTOS-信号量详解_freertos信号量-CSDN博客 目录 FreeRTOS信号量一、信号量是什么二、 FreeRTOS信号量1、二值信号量1、获取信号量2、释放信号量 2、计数信号量3、互斥信号量1、优先级反转2、优先级继承3、源码解析1、互斥量创建2、获取…

FFmpeg常用结构体、关键函数、ffplay.c分析

一、常用结构体&#xff1a; 1、AVFormatContext结构体&#xff1a; AVFormatContext是一个贯穿全局的数据结构&#xff0c;很多函数都要用它作为参数。FFmpeg代码中对这个数据结构的注释是format I/O context&#xff0c;此结构包含了一个视频流的格式内容。其中存有AVIputFor…
最新文章