BootsJS上新!一个库解决大部分难题!

不知不觉距离第一次发文章介绍自己写的库BootsJS已经过去一个月了,这个月里收到了许许多多JYM的反馈与建议,自己也再一次对BootsJS进行了改进与完善,又一次增加了很多功能,为此我想应该给JYM们汇报汇报这个月的工作进展。

BootJS仓库:github.com/JunLiangWan...

BootJS文档:junliangwangx.github.io/BootsJS/

上一版本功能

害怕新的同学没看过之前文章,容我花点篇幅介绍下之前版本支持的功能!

库的安装与引用,方法的具体使用大家可以看我之前的文章:《摸鱼时间写了个库,比lodash更丰富!》,我就不在这里赘述了。

日期处理工具:DateTool

方法 作用
dateCalculator 日期加/减计算
dateFormater 格式化日期与时间
getDateDiff 计算两日期的相隔时间
getDaysInMonth 给定日期返回当月总天数
isLeapYear 给定年份判断是否闰年

性能工具:PerformanceTool

方法 作用
debounce 防抖
throttle 节流
memoize 缓存函数的计算结果

字符串处理工具:StringTool

方法 作用
camelCaseNameToDashName 驼峰命名转短横线命名
dashNameToUpperCamelCaseName 短横线命名转大写驼峰命名

正则规则:RegRules

方法 作用
IPAddressRule 匹配IP地址
chineseIDCardRule 匹配身份证号码
chinesePhoneNumberRule 匹配中国手机号码
..... .....

优先级队列:PriorityQueue

方法 作用
priorityQueue.enqueue('1', 1) 入队
priorityQueue.dequeue() 出队
priorityQueue.top 获取队顶元素
priorityQueue.length 获取队列大小
priorityQueue.isEmpty 队列是否为空

本版本新增的功能

我们来看看这个月加入了什么引人注目的功能吧!

对象处理工具:ObjectTool

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

// -------- Import on Demand(按需引入)
const { ObjectTool } = require('boots-js/object-tool'); // Node
import { ObjectTool } from 'boots-js/object-tool' // Es6 Module
ObjectTool.type(123); //'Number'

判断参数类型:type()

js 复制代码
ObjectTool.type(new Array()); //'Array'
ObjectTool.type('123'); //'String'
ObjectTool.type(true); //'Boolean'
ObjectTool.type(new Map()); //'Map'

深度拷贝对象:deepClone()

js 复制代码
// 支持的类型:原始类型、TypedArray、Array、Set、Map、Object、ArrayBuffer、DataView、Date、RegExp、Symbol、Proxy(将被视为对象,拦截器无法复制)
// 注意:不支持的类型,例如:Function、WeakRef、WeakSet、WeakMap等会直接复制其引用

const obj1={Number:1},obj2={Boolean:2},obj3={obj:obj1,String:'123'},
const testObj={
   Int8Array:new Int8Array([1,2,3,4,5]),
   Date:new Date(),
   RegExp:/1234/,
   Array:new Array(...[obj1,obj2,obj3]),
   Set:new Set([obj1,obj2,obj3]),
   Map:map,
   Object:obj3,
   ArrayBuffer:new ArrayBuffer(10),
   DataView:new DataView(new ArrayBuffer(10)),
   Function:fun
}

let deepCopyObj=ObjectTool.deepClone(testObj)
deepCopyObj.Int8Array===testObj.Int8Array //false
deepCopyObj.Date===testObj.Date //false
deepCopyObj.Object.obj1.obj===testObj.Object.obj1.obj //false

比较两对象是否相等:isEqual()

js 复制代码
// 支持的类型:原始类型、TypedArray、Array、Set、Map、Object、ArrayBuffer、DataView、Date、RegExp、Symbol(比较其description)、Proxy(将被视为对象,拦截器无法比较)
// 注意:不支持的类型,例如:Function、WeakRef、WeakSet、WeakMap等会直接比较其引用地址

const testObj2={
    BigInt64Array:new BigInt64Array([BigInt(123),BigInt(123),BigInt(123)]),
    RegExp:/1234/,
    Array:new Array(...[obj1,obj2,obj3,obj4]),
    Set:new Set([obj1,obj2,obj3,obj4]),
    Object:obj4,
    Map:map2,
    Date:date,
    ArrayBuffer:new ArrayBuffer(10),
    DataView:new DataView(new ArrayBuffer(10)),
}

ObjectTool.isEqual(testObj2,ObjectTool.deepClone(testObj2)) //true
let testObj5=ObjectTool.deepClone(testObj2)
testObj5.Object.obj1.String='12344'
ObjectTool.isEqual(testObj2,testObj5)  //false

将对象转换为String:argToStrKey()

js 复制代码
// 支持的类型:原始类型、TypedArray、Array、Set、Map、Object、ArrayBuffer、Function、DataView、Date、 RegExp、Symbol、Proxy(将被视为对象,拦截器无法输出)
// 注意:不支持的类型,例如:WeakRef、WeakSet、WeakMap等会直接输出类型

const testObj2={
    BigInt64Array:new BigInt64Array([BigInt(123),BigInt(123),BigInt(123)]),
    RegExp:/1234/,
    Array:new Array(...[obj1,obj2,obj3,obj4]),
    Set:new Set([obj1,obj2,obj3,obj4]),
    Object:obj4,
    Map:map2,
    Date:date,
    ArrayBuffer:new ArrayBuffer(10),
    DataView:new DataView(new ArrayBuffer(10)),
}
const testObj3={
    Array:new Array(...[obj1,obj2,obj3,obj4]),
    Set:new Set([obj1,obj2,obj3,obj4]),
    BigInt64Array:new BigInt64Array([BigInt(123),BigInt(123),BigInt(123)]),
    ArrayBuffer:new ArrayBuffer(10),
    Object:obj4,
    Map:map2,
    Date:date,
    DataView:new DataView(new ArrayBuffer(10)),
    RegExp:/1234/,
}

let testObj5=ObjectTool.deepClone(testObj2)
testObj5.Object.obj1.String='12344'

ObjectTool.argToStrKey(testObj2)===ObjectTool.argToStrKey(testObj3) //true
ObjectTool.argToStrKey(testObj2)===ObjectTool.argToStrKey(testObj5) //false

处理树的工具:TreeTool

js 复制代码
// -------- Global Import(全局引入)
const BootsJS = require('boots-js'); // Node
import BootsJS from 'boots-js' // Es6 Module
BootsJS.TreeTool.tree2Array(tree,'childList',options)

// -------- Import on Demand(按需引入)
const { TreeTool } = require('boots-js/tree-tool'); // Node
import { TreeTool } from 'boots-js/tree-tool' // Es6 Module
TreeTool.tree2Array(tree,'childList',options)

树转换成数组: tree2Array()

js 复制代码
const tree = {
       name: '中国',
       code: '0',
       childList: [
           {
               name: '重庆',
               code: '01',
           },
           {
               name: '四川',
               code: '02',
           },
           {
               name: '广东',
               code: '03',
           },
       ]
   } 
   let arr = TreeTool.tree2Array([tree], 'childList', {
       isGenerateLevel: true,
       generateLevelAttributeName:'level',
       isGenerateParentID: true,
       generateParentIDAttributeName: 'parentCode',
       nodeIDAttributeName: 'code',
       deleteAttributeList: ['childList']
   })
   console.info(arr)
     [
       { name: '中国', code: '0' , level:0 },
       { name: '重庆', code: '01', level:1 , parentCode: '0' },
       { name: '四川', code: '02', level:1 , parentCode: '0' },
       { name: '广东', code: '03', level:1 , parentCode: '0' },
     ]

数组转换为树:array2Tree()

js 复制代码
const arr = [
       { name: '中国', code: '0' , level:0 },
       { name: '重庆', code: '01', level:1 , parentCode: '0' },
       { name: '四川', code: '02', level:1 , parentCode: '0' },
       { name: '广东', code: '03', level:1 , parentCode: '0' },
   ]
   let genTree = TreeTool.array2Tree(arr, 'code', 'parentCode', 'childList', (node) => {
       return !('parentCode' in node)
   })
   console.info(genTree)
     [
       {
         name: '中国',
         code: '0',
         level: 0,
         childList: [
           { name: '重庆', code: '01', level:1,  parentCode: '0', childList: [] },
           { name: '四川', code: '02', level:1, parentCode: '0', childList: [] },
           { name: '广东', code: '03', level:1, parentCode: '0', childList: [] }
         ]
       }
     ]

获取所有子节点:getChildList()

js 复制代码
const tree = {
       name: '中国',
       code: '0',
       childList: [
           {
               name: '重庆',
               code: '01',
           },
           {
               name: '四川',
               code: '02',
           },
           {
               name: '广东',
               code: '03',
           },
       ]
   } 
   let arr = TreeTool.getChildList([tree], 'code', '0', 'childList')
   console.info(arr)
     [
       { name: '重庆', code: '01' },
       { name: '四川', code: '02' },
       { name: '广东', code: '03' },
     ]

过滤节点:filter()

js 复制代码
const tree = {
         name: '中国',
         code: '0',
         level: 0,
         childList: [
           { name: '重庆', code: '01', level:1,  parentCode: '0', childList: [] },
           { name: '四川', code: '02', level:1, parentCode: '0', childList: [] },
           { name: '广东', code: '03', level:1, parentCode: '0', childList: [] }
         ]
   }
   let arr = TreeTool.filter([tree], 'childList', (obj) => {
       return obj.parentCode === '0'
   })
   console.info(arr)
     [
       { name: '重庆', code: '01', level:1 , parentCode: '0', childList: [] },
       { name: '四川', code: '02', level:1 , parentCode: '0', childList: [] },
       { name: '广东', code: '03', level:1 , parentCode: '0', childList: [] },
     ]

查找某节点的路径:findPath()

js 复制代码
const tree = {
         name: '中国',
         code: '0',
         level: 0,
         childList: [
           { name: '重庆', code: '01', level:1, parentCode: '0', childList: [] },
           { name: '四川', code: '02', level:1, parentCode: '0', childList: [] },
           { name: '广东', code: '03', level:1, parentCode: '0', childList: [] }
         ]
   }
   let path = TreeTool.findPath([tree],'code','03','childList')
   console.info(path)
   [
       {
         name: '中国',
         code: '0',
         level: 0,
         childList: [ [Object], [Object], [Object] ]
       },
       { name: '广东', code: '03', parentCode: '0', level: 1, childList: [] }
   ]

处理数组的工具:ArrayTool

js 复制代码
// -------- Global Import(全局引入)
const BootsJS = require('boots-js'); // Node
import BootsJS from 'boots-js' // Es6 Module
BootsJS.ArrayTool.removeDuplicates([1,2,3,1]);

// -------- Import on Demand(按需引入)
const { ArrayTool } = require('boots-js/array-tool'); // Node
import { ArrayTool } from 'boots-js/array-tool' // Es6 Module
ArrayTool.removeDuplicates([1,2,3,1]);

数组去重: removeDuplicates()

js 复制代码
const test1={a:'1'},test2={a:'1'},
arr1=[test1,test2,test1],
arr2=[1,2,3,1,4];
ArrayTool.removeDuplicates(arr1) // [{a:'1'},{a:'1'}]
ArrayTool.removeDuplicates(arr1,true) // [{a:'1'}]
ArrayTool.removeDuplicates(arr2) //[1,2,3,4];

处理日期时间的工具: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');

转换时区: convertTimeZone()

js 复制代码
DateTool.convertTimeZone(
        1711611931754,
        DateTool.timeZoneOffsetEnum['UTC+08:00'], 
        DateTool.timeZoneOffsetEnum['UTC-06:00'])
DateTool.convertTimeZone(
        '2024/2/12',
        DateTool.timeZoneOffsetEnum['UTC+08:00'], 
        DateTool.timeZoneOffsetEnum['UTC+09:00'])

最后

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

BootJS仓库:github.com/JunLiangWan...

BootJS文档:junliangwangx.github.io/BootsJS/

点击链接或微信搜索"汪啊汪"🔎,关注我及时掌握最新动态

相关推荐
dorabighead34 分钟前
JavaScript 高级程序设计 读书笔记(第三章)
开发语言·javascript·ecmascript
css趣多多1 小时前
案例自定义tabBar
前端
AI服务老曹1 小时前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
gz927cool1 小时前
大模型做导师之开源项目学习(lightRAG)
学习·开源·mfc
姑苏洛言2 小时前
DeepSeek写微信转盘小程序需求文档,这不比产品经理强?
前端
林的快手2 小时前
CSS列表属性
前端·javascript·css·ajax·firefox·html5·safari
Ainnle2 小时前
企业级RAG开源项目分享:Quivr、MaxKB、Dify、FastGPT、RagFlow
人工智能·开源
匹马夕阳3 小时前
ECharts极简入门
前端·信息可视化·echarts
bug总结3 小时前
新学一个JavaScript 的 classList API
开发语言·javascript·ecmascript
网络安全-老纪3 小时前
网络安全-js安全知识点与XSS常用payloads
javascript·安全·web安全