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

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

image.png

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


const BootsJS = require('boots-js'); 
import BootsJS from 'boots-js' 
BootsJS.ObjectTool.type(123); 


const { ObjectTool } = require('boots-js/object-tool'); 
import { ObjectTool } from 'boots-js/object-tool' 
ObjectTool.type(123); 

判断参数类型:type()

ObjectTool.type(new Array()); 
ObjectTool.type('123'); 
ObjectTool.type(true); 
ObjectTool.type(new Map()); 

深度拷贝对象:deepClone()




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 
deepCopyObj.Date===testObj.Date 
deepCopyObj.Object.obj1.obj===testObj.Object.obj1.obj 

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




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)) 
let testObj5=ObjectTool.deepClone(testObj2)
testObj5.Object.obj1.String='12344'
ObjectTool.isEqual(testObj2,testObj5)  

将对象转换为String:argToStrKey()





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) 
ObjectTool.argToStrKey(testObj2)===ObjectTool.argToStrKey(testObj5) 

处理树的工具:TreeTool


const BootsJS = require('boots-js'); 
import BootsJS from 'boots-js' 
BootsJS.TreeTool.tree2Array(tree,'childList',options)


const { TreeTool } = require('boots-js/tree-tool'); 
import { TreeTool } from 'boots-js/tree-tool' 
TreeTool.tree2Array(tree,'childList',options)

树转换成数组: tree2Array()

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()

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()

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()

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()

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


const BootsJS = require('boots-js'); 
import BootsJS from 'boots-js' 
BootsJS.ArrayTool.removeDuplicates([1,2,3,1]);


const { ArrayTool } = require('boots-js/array-tool'); 
import { ArrayTool } from 'boots-js/array-tool' 
ArrayTool.removeDuplicates([1,2,3,1]);

数组去重: removeDuplicates()

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

处理日期时间的工具:DateTool


const BootsJS = require('boots-js'); 
import BootsJS from 'boots-js' 
BootsJS.DateTool.dateFormater(new Date(),'YYYY-MM-DD HH:mm:ss');


const { DateTool } = require('boots-js/date-tool'); 
import { DateTool } from 'boots-js/date-tool' 
DateTool.dateFormater(new Date(),'YYYY-MM-DD HH:mm:ss');

转换时区: convertTimeZone()

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/

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

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=20851,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?