摸鱼时间写了个库,比lodash更丰富!

程序员他爱做梦 2024-06-13 16:22:32

想必大家在日常工作中总会需要使用到各种各样的工具函数,例如:防抖、节流、日期计算、日期格式化、正则....等等,每次用到就要百度,可不可靠先且不谈,每次查找/验证的过程都是非常烦人的,有天我在摸鱼的时候突然想到,为啥不自己写一个呢?方便自己方便他人,二话不说,干!于是乎BootsJS诞生了,下面为大家介绍下目前BootsJS使用以及支持的功能。

BootsJS 是一个致力于扩展原生 JavaScript 功能的库,旨在解决 JavaScript 原生不支持的常见数据结构、方法和常用算法。

安装npmnpm install boots-js

yarnyarn add boots-js

使用CommonJS// 全局导入const BootsJS=require('boots-js');let ascPriorityQueue = new BootsJS.PriorityQueue(true);ascPriorityQueue.enqueue('1', 1)ascPriorityQueue.length// 按需导入const { PriorityQueue } = require('boots-js/priority-queue');let priorityQueue = new PriorityQueue();priorityQueue.enqueue('1', 1)priorityQueue.length

ES6 Module// 全局导入import BootsJS from 'boots-js'let ascPriorityQueue = new BootsJS.PriorityQueue(true);ascPriorityQueue.enqueue('1', 1)ascPriorityQueue.length// 按需导入import { PriorityQueue } = from 'boots-js/priority-queue'let priorityQueue = new PriorityQueue();priorityQueue.enqueue('1', 1)priorityQueue.length

支持的功能日期处理工具:DateTool// -------- Global Import(全局引入)const BootsJS = require('boots-js'); // Nodeimport BootsJS from 'boots-js' // Es6 ModuleBootsJS.DateTool.dateFormater(new Date(),'YYYY-MM-DD HH:mm:ss');// -------- Import on Demand(按需引入)const { DateTool } = require('boots-js/date-tool'); // Nodeimport { DateTool } from 'boots-js/date-tool' // Es6 ModuleDateTool.dateFormater(new Date(),'YYYY-MM-DD HH:mm:ss');

日期加/减计算:dateCalculator()DateTool.dateCalculator('2024/2/12', { years: 1 }).toISOString() //2025-02-12

格式化日期与时间:dateFormater()DateTool.dateFormater('Mon Feb 26 2024', 'YYYY-MM-DD') //2024-02-26DateTool.dateFormater('2024/2/26', 'YYYY-MM-DD') //2024-02-26DateTool.dateFormater(1708917102083, 'YYYY-MM-DD HH:mm:ss') //'2024-02-26 11:11:42'DateTool.dateFormater('2024/2/26 11:11:42', 'YYYY/MM/DD/HH/mm/ss') //'2024/02/26/11/11/42';

计算两日期的相隔时间:getDateDiff()DateTool.getDateDiff('2024/1/26', '2025/1/26', DateTool.dateUnitEnum.day) //366DateTool.getDateDiff('2024/1/26', '2025/1/26', DateTool.dateUnitEnum.month) //12DateTool.getDateDiff('2025/6/19', '2025/9/18', DateTool.dateUnitEnum.year) //0DateTool.getDateDiff('2025/6/19', '2025/9/18', DateTool.dateUnitEnum.all) //{years: 0, months: 2,days: 30,hours: 0,minutes: 0,seconds: 0}

给定日期返回当月总天数:getDaysInMonth()DateTool.getDaysInMonth(2024, 2) //29DateTool.getDaysInMonth(2025, 2) //28DateTool.getDaysInMonth(2025, 8) //31

给定年份判断是否闰年:isLeapYear()DateTool.isLeapYear(2040) //trueDateTool.isLeapYear(2019) //false

性能工具:PerformanceTool// -------- Global Import(全局引入)const BootsJS = require('boots-js'); // Nodeimport BootsJS from 'boots-js' // Es6 ModuleBootsJS.PerformanceTool.debounce(test);// -------- Import on Demand(按需引入)const { PerformanceTool } = require('boots-js/performance-tool'); // Nodeimport { PerformanceTool } from 'boots-js/performance-tool' // Es6 ModulePerformanceTool.debounce(test);

防抖:debounce()let num=0function add(nv){ num+=nv}const debounceAdd=PerformanceTool.debounce(add);debounceAdd(1);debounceAdd(1);debounceAdd(1);console.info(num); // 1

节流:throttle()let num=0function add(nv){ num+=nv}const throttleAdd=PerformanceTool.throttle(add);throttleAdd(1);throttleAdd(1);throttleAdd(1);console.info(num); // 1

缓存函数的计算结果:memoize()let count=0function addCount(nv){ count+=nv; return count }const memoizeAdd=PerformanceTool.memoize(addCount,{ expirationTime:2000})memoizeAdd(1);memoizeAdd(1);memoizeAdd(1);console.info(count) //1memoizeAdd(2);memoizeAdd(2);memoizeAdd(2);console.info(count) //3

字符串处理工具:StringTool// -------- Global Import(全局引入)const BootsJS = require('boots-js'); // Nodeimport BootsJS from 'boots-js' // Es6 ModuleBootsJS.StringTool.dashNameToUpperCamelCaseName('string-tool')// -------- Import on Demand(按需引入)const { StringTool } = require('boots-js/string-tool'); // Nodeimport { StringTool } from 'boots-js/string-tool' // Es6 ModuleStringTool.dashNameToUpperCamelCaseName('string-tool')

驼峰命名转短横线命名:StringTool.camelCaseNameToDashName('StringTool') //string-tool

短横线命名转大写驼峰命名:StringTool.dashNameToUpperCamelCaseName('string-tool') //StringTool

正则规则:RegRules// -------- Global Import(全局引入)const BootsJS = require('boots-js'); // Nodeimport BootsJS from 'boots-js' // Es6 Module// -------- Import on Demand(按需引入)const { RegRules } = require('boots-js/reg-rules'); // Nodeimport { RegRules } from 'boots-js/reg-rules' // Es6 Module// 匹配IP地址的正则表达式RegRules.IPAddressRule.test('192.168.0.1') //true// 匹配身份证号码的正则表达式RegRules.chineseIDCardRule.test('52052219830823283x') //true// 匹配中国手机号码的正则表达式RegRules.chinesePhoneNumberRule.test('18523127384') //true// 匹配中国手机号码的正则表达式RegRules.emailRule.test('wjl@gmail.com') //true.....

优先级队列:PriorityQueue// -------- Global Import(全局引入)const BootsJS = require('boots-js'); // Nodeimport BootsJS from 'boots-js' // Es6 Modulelet ascPriorityQueue = new BootsJS.PriorityQueue(true);// -------- Import on Demand(按需引入)const { PriorityQueue } = require('boots-js/priority-queue'); // Nodeimport { PriorityQueue } from 'boots-js/priority-queue' // Es6 Modulelet priorityQueue = new PriorityQueue();priorityQueue.isEmpty //truepriorityQueue.length //0```priorityQueue.enqueue('1', 1)priorityQueue.top //{element:'1',priority:1}priorityQueue.enqueue('1', 5)priorityQueue.dequeue() //{element:'1',priority:5}

作者:汪啊汪QAQ链接:https://juejin.cn/post/7340462380336660490

0 阅读:2

程序员他爱做梦

简介:感谢大家的关注