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

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

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

安装

npm

shell 复制代码
npm install boots-js

yarn

shell 复制代码
yarn add boots-js

使用

CommonJS

js 复制代码
// 全局导入
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

js 复制代码
// 全局导入
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

js 复制代码
// -------- Global Import(全局引入)
const BootsJS = require('boots-js'); // Node
import BootsJS from 'boots-js' // Es6 Module
BootsJS.DateTool.dateFormater(new Date(),'YYYY-MM-DD HH:mm:ss');

// -------- Import on Demand(按需引入)
const { DateTool } = require('boots-js/date-tool'); // Node
import { DateTool } from 'boots-js/date-tool' // Es6 Module
DateTool.dateFormater(new Date(),'YYYY-MM-DD HH:mm:ss');

日期加/减计算:dateCalculator()

js 复制代码
DateTool.dateCalculator('2024/2/12', { years: 1 }).toISOString() //2025-02-12

格式化日期与时间:dateFormater()

js 复制代码
DateTool.dateFormater('Mon Feb 26 2024', 'YYYY-MM-DD')             //2024-02-26
DateTool.dateFormater('2024/2/26', 'YYYY-MM-DD')                   //2024-02-26
DateTool.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()

js 复制代码
DateTool.getDateDiff('2024/1/26', '2025/1/26', DateTool.dateUnitEnum.day)   //366
DateTool.getDateDiff('2024/1/26', '2025/1/26', DateTool.dateUnitEnum.month) //12
DateTool.getDateDiff('2025/6/19', '2025/9/18', DateTool.dateUnitEnum.year)  //0
DateTool.getDateDiff('2025/6/19', '2025/9/18', DateTool.dateUnitEnum.all)   //{years: 0, months: 2,days: 30,hours: 0,minutes: 0,seconds: 0}

给定日期返回当月总天数:getDaysInMonth()

js 复制代码
DateTool.getDaysInMonth(2024, 2)            //29
DateTool.getDaysInMonth(2025, 2)            //28
DateTool.getDaysInMonth(2025, 8)            //31

给定年份判断是否闰年:isLeapYear()

js 复制代码
DateTool.isLeapYear(2040)             //true
DateTool.isLeapYear(2019)             //false

性能工具:PerformanceTool

js 复制代码
// -------- Global Import(全局引入)
const BootsJS = require('boots-js'); // Node
import BootsJS from 'boots-js' // Es6 Module
BootsJS.PerformanceTool.debounce(test);

// -------- Import on Demand(按需引入)
const { PerformanceTool } = require('boots-js/performance-tool'); // Node
import { PerformanceTool } from 'boots-js/performance-tool' // Es6 Module
PerformanceTool.debounce(test);

防抖:debounce()

js 复制代码
let num=0
function add(nv){
   num+=nv
}
const debounceAdd=PerformanceTool.debounce(add);
debounceAdd(1);
debounceAdd(1);
debounceAdd(1);
console.info(num); // 1

节流:throttle()

js 复制代码
let num=0
function add(nv){
   num+=nv
}
const throttleAdd=PerformanceTool.throttle(add);
throttleAdd(1);
throttleAdd(1);
throttleAdd(1);
console.info(num); // 1

缓存函数的计算结果:memoize()

js 复制代码
let count=0
function addCount(nv){
   count+=nv;
   return count 
}
const memoizeAdd=PerformanceTool.memoize(addCount,{
   expirationTime:2000
})
memoizeAdd(1);memoizeAdd(1);memoizeAdd(1);
console.info(count)  //1
memoizeAdd(2);memoizeAdd(2);memoizeAdd(2);
console.info(count)  //3

字符串处理工具:StringTool

js 复制代码
// -------- Global Import(全局引入)
const BootsJS = require('boots-js'); // Node
import BootsJS from 'boots-js' // Es6 Module
BootsJS.StringTool.dashNameToUpperCamelCaseName('string-tool')

// -------- Import on Demand(按需引入)
const { StringTool } = require('boots-js/string-tool'); // Node
import { StringTool } from 'boots-js/string-tool' // Es6 Module
StringTool.dashNameToUpperCamelCaseName('string-tool')

驼峰命名转短横线命名:

js 复制代码
StringTool.camelCaseNameToDashName('StringTool') //string-tool

短横线命名转大写驼峰命名:

js 复制代码
StringTool.dashNameToUpperCamelCaseName('string-tool') //StringTool

正则规则:RegRules

js 复制代码
// -------- Global Import(全局引入)
const BootsJS = require('boots-js'); // Node
import BootsJS from 'boots-js' // Es6 Module

// -------- Import on Demand(按需引入)
const { RegRules } = require('boots-js/reg-rules'); // Node
import { 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

js 复制代码
// -------- Global Import(全局引入)
const BootsJS = require('boots-js'); // Node
import BootsJS from 'boots-js' // Es6 Module
let ascPriorityQueue = new BootsJS.PriorityQueue(true);

// -------- Import on Demand(按需引入)
const { PriorityQueue } = require('boots-js/priority-queue'); // Node
import { PriorityQueue } from 'boots-js/priority-queue' // Es6 Module
let priorityQueue = new PriorityQueue();
priorityQueue.isEmpty  //true
priorityQueue.length  //0```
priorityQueue.enqueue('1', 1)
priorityQueue.top  //{element:'1',priority:1}
priorityQueue.enqueue('1', 5)
priorityQueue.dequeue()  //{element:'1',priority:5}

最后

目前我只想到和完成了这些功能,希望大家多多提提意见呀,包括想要的功能,改进建议等等,我一个人的想法和能力都过于局限,如果有余力的话欢迎PR一起弄呀!如果真的对大家有所帮助,能给个star鼓励下作者嘛🫡

仓库:github.com/JunLiangWan...

相关推荐
可乐鸡翅yeah_7 分钟前
fmp4 碎片 MP4 格式 HLS 流,和传统 TS 分片有什么不一样
开发语言·javascript·ios·音视频·safari·m3u8·m3u8在线播放
anew___1 小时前
《从零手写操作系统 (20):ELF加载器——让OS读懂现代编译器》
java·服务器·前端
ss2731 小时前
AI全栈实战 | 2.3-01 组件库实战:Element Plus 怎么搭出专业界面,过度封装为什么成维护负担
前端·javascript·elementui·vue
对空六课1 小时前
动态按钮ID变化时的稳定埋点标识设计
前端·数据分析
福兮说1 小时前
URL 编码的七个坑:c++ 传到后端变空格、%25 套娃、截断 emoji 直接报错
开发语言·前端·javascript·node.js·url
吴声子夜歌1 小时前
Nginx应用与运维——Nginx Web服务应用实战(Python网站的搭建)
运维·前端·nginx
小的时候可菜了2 小时前
JS 异步的本质:从单线程到 thenable(一条进化链)
开发语言·前端·javascript
liangshanbo12152 小时前
Webpack vs Vite 底层原理高频追问的问题
前端·webpack·node.js
可乐鸡翅yeah_2 小时前
hls.js 配置 loadStartPosition,点播起始播放位置踩坑
开发语言·javascript·网络协议·ecmascript·m3u8在线
web打印社区2 小时前
Windows 网页静默打印设置步骤:客户端、防火墙与联调清单
开发语言·前端·javascript·chrome·pdf·ecmascript