撸了一个简易的工具库: jeasy

一年前,发现在工作的项目中存在大量使用monment的情况,但仅使用到最基础的format功能。monment的体积直接导致项目体积成倍增加,于是jeasy就诞生了。 jeasy实现了monment最为常用的功能,并将GridManager中一些工具方法进行了抽离。

安装

npm install jeasy --save
复制代码

方法介绍

Date 日期相关

jeasy.moment() 日期函数

jeasy.moment并不对时区进行处理,如果有需要使用时区的请直接使用moment库。

// number格式的年月日
jeasy.moment(19880102);

// string格式的年月日
jeasy.moment(‘19880102‘);

// 使用`/`相隔的字符串
jeasy.moment(‘1988/01/02 12:12:22‘);

// 使作`-`相隔的字符串
jeasy.moment(‘1988-01-02 12:12:22‘);

// 时间戳
jeasy.moment(1547285063173);

// format
jeasy.moment(1547285063173).format("YYYY-MM-DD"); // 2019-01-12
jeasy.moment(1547285063173).format("YYYY年MM月DD日"); // 2019年01月12日
jeasy.moment(1547285063173).format("YYYY-MM-DD HH:mm:ss"); // 2019-01-12 17:24:23

// 获取年月日
jeasy.moment(1547285063173).fullYear; // 2019
jeasy.moment(1547285063173).year; // 19
jeasy.moment(1547285063173).month; // 1
jeasy.moment(1547285063173).date; // 12

// 获取时分秒
jeasy.moment(1547285063173).hour; // 17
jeasy.moment(1547285063173).minute; // 24
jeasy.moment(1547285063173).second; // 23

// 获取周
jeasy.moment(1547285063173).day; // 6
复制代码

Object 对象与JSON相关

jeasy.equal(object1, object2) 验证两个Object是否相同

// 验证对象
let o1 = {name: ‘baukh‘, age: 31};
let o2 = {name: ‘baukh‘, age: 31};
let o3 = {name: ‘kouzi‘, age: 28};
jeasy.equal(o1, o2); // true
jeasy.equal(o1, o3); // false

// 验证字符串
jeasy.equal(‘baukh‘, ‘baukh‘); // true

// 验证数组
let a1 = [1, 2, 3];
let a2 = [1, 2, 3];
let a3 = [3, 2, 1];
jeasy.equal(a1, a2); // true
jeasy.equal(a1, a3); // false
复制代码

jeasy.index(array, object) 获取Array中Object的索引

let o1 = {name: ‘cc‘, age: 31};
let o2 = {name: ‘kouzi‘, age: 31};
let o3 = {name: ‘baukh‘, age: 31};
let arr = [{name: ‘baukh‘, age: 31}, {name: ‘cc‘, age: 31}];
jeasy.index(arr, o1); // 1
jeasy.index(arr, o2); // -1
jeasy.index(arr, o3); // 0
复制代码

jeasy.find(array, key, value) 通过指定字段筛选Array

const arr = [{name: ‘baukh‘, age: 31}, {name: ‘cc‘, age: 30}, {name: ‘kouz‘, age: 29}, {name: ‘rabbit‘, age: 28}];
jeasy.find(arr, ‘name‘, ‘baukh‘); // [{name: ‘baukh‘, age: 31}]
jeasy.find(arr, ‘age‘, 29); // [{name: ‘kouz‘, age: 29}]
jeasy.find(arr, ‘age‘, 33); // []
复制代码

jeasy.clone(obj) clone 对象

对 JSON.stringify 存在丢失的类型(如function)不作处理。

let o1 = {name: ‘cc‘, age: 31}; let o2 = jeasy.clone(o1); o1.name; // cc o1 === o2; // false

jeasy.isEmpty(obj) 检测是否为空对象

let o1 = {name: ‘cc‘, age: 31};
let o2 = {};
jeasy.isEmpty(o1); // false
jeasy.isEmpty(o2); // true
复制代码

jeasy.type(value) 获取传参的类型

jeasy.type(undefined); //undefined
jeasy.type(null); // null
jeasy.type(true); // boolean
jeasy.type(Boolean()); // boolean
jeasy.type(123); // number
jeasy.type(Number(123)); // number
jeasy.type(‘123‘); // string
jeasy.type(String(‘123‘)); // string
jeasy.type(() => {}); // function
jeasy.type([]); // array
jeasy.type(new Array(1)); // array
jeasy.type(new Date()); // date
jeasy.type(Error()); // error
jeasy.type(/test/); // regexp
jeasy.type(document.body); // element
jeasy.type(nodeList); // nodeList
jeasy.type(divEle); // element
复制代码

jeasy.trim(json) 清除JSON中为[null, undefined]的字段

// 传参为对象
let o = {name: ‘kouzi‘, age: 28, like: null, title: undefined, gender: 0};
jeasy.trim(o); // {name: ‘kouzi‘, age: 28, gender: 0}

// 传参为字符串
let o = ‘  baukh  ‘;
jeasy.trim(o); // baukh
复制代码

jeasy.toQueryString(formData) Object转换为queryString

// 传参为常规json
jeasy.toQueryString({ name:‘zhangsan‘, age: 12 }); // ‘name=zhangsan&age=12‘

// 传参存在空值的json
jeasy.toQueryString({ name:‘zhangsan‘, age: ‘‘ }); // ‘name=zhangsan&age=‘

// 传参存在null值和对象的json
jeasy.toQueryString({ name: ‘zhangsan‘, params: { name: ‘zhangsan‘, age: 12 }, page: { currentPage: 1, pageSize: 10 }, other: null });
// => ‘name=zhangsan&params={"name":"zhangsan","age":12}&page={"currentPage":1,"pageSize":10}&other=null‘

复制代码

String 字符串相关

jeasy.toHump(str) 连字符转驼峰

jeasy.toHump(‘font-size‘); //fontSize
复制代码

jeasy.toHyphen(str); 驼峰转连字符

jeasy.toHyphen(‘FontSize‘); // -font-size
复制代码

jeasy.toFormData(str) queryString的形式解析成对象

// 常规值
jeasy.toFormData(‘name=zhangsan&age=22&gender=male‘) //{name:‘zhangsan‘, age: ‘22‘, gender:‘male‘}

// 首字符为?号型式
jeasy.toFormData(‘?name=zhangsan&age=22&gender=male‘) //{name:‘zhangsan‘, age: ‘22‘, gender:‘male‘}

// 包含空值
jeasy.toFormData(‘name=zhangsan&birth=‘) //{name:‘zhangsan‘, birth:‘‘}

// 包含类对像值
jeasy.toFormData(‘name=zhangsan&other={gender: "male"}‘) //{name:‘zhangsan‘, other: "{gender: \"male\"}"}}
复制代码

Text 文本相关

jeasy.copyText(str) 将文本放粘贴板

jeasy.copyText(‘font-size‘); // 粘贴板中的值为font-size
复制代码

jeasy.getTextWidth(text) 获取文本所占宽度

// 需要注意: 获取的宽度与当前document.body上所设置的`font-size`, `font-weight`, `font-family`有关。
document.body.style.fontSize = ‘12px‘;
document.body.style.fontFamily = ‘Tahoma‘;
document.body.style.fontWeight = ‘400‘;

jeasy.getTextWidth(‘aaa‘); // 18
jeasy.getTextWidth(‘测试宽度‘); // 48
复制代码

Number 数字相关

jeasy.toPercentile(value, decimal, fixed) 浮点数转换百分位

// @param value: 需要转换的数值
// @param decimal: 保留小数点位数
// @param fixed: 是否强制保留decimal指定的位数
// @returns {*}: 返回百分位格式的字符串
jeasy.toPercentile(0.1230123, 1); // ‘12.3%‘
jeasy.toPercentile(0.1230123, 2); // ‘12.30%‘
jeasy.toPercentile(0.1230123, 2, false); // ‘12.3%‘
复制代码

jeasy.toThousands(value, decimal, fixed) 浮点数转换千分位

// @param value: 需要转换的数值
// @param decimal: 保留小数点位数
// @param fixed: 是否强制保留decimal指定的位数
// @returns {*}: 返回千分位格式的字符串
jeasy.toThousands(value, 1); // ‘123.0‰‘
jeasy.toThousands(value, 1, false); // ‘123‰‘
jeasy.toThousands(value, 2); // ‘123.01‰‘
jeasy.toThousands(value, 2, false); // ‘123.01‰‘
复制代码

File 文件相关

jeasy.download(response, fileName);

// @param response: 通过后端接口返回二进制流(blob)。response允许两种格式: 1.blob; 2.{data: blob};
// @param fileName: 文件名称
jeasy.download(response, fileName); // 文件下载

复制代码

推荐

作者:baukh789
链接:https://juejin.im/post/5de9cf9ff265da33d451eb19
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/yizijianxin/p/12000259.html

时间: 2024-08-01 14:20:35

撸了一个简易的工具库: jeasy的相关文章

SDS(Simple Dynamic String)一个简易动态字符串库

SDS(Simple Dynamic Strings)是一个C语言字符串库,设计中增加了从堆上分配内存的字符串,来扩充有限的libc字符处理的功能,使得: 使用更简便 二进制安全 计算更有效率 而且仍旧…兼容一般的C字符串功能 它使用另一种设计来实现,不用C结构体来表现一个字符串,而是使用一个二进制的前缀(prefix),保存在实际的指向字符串的指针之前,SDS将其返回给用户. C 1 2 3 4 5 +--------+-------------------------------+-----

通过实现一个简易打包工具,分析打包的原理

概述 眼下wepack似乎已经成了前端开发中不可缺少的工具之一,而他的一切皆模块的思想随着webpack版本不断的迭代(webpack 4)使其打包速度更快,效率更高的为我们的前端工程化服务 相信大家使用webpack已经很熟练了,他通过一个配置对象,其中包括对入口,出口,插件的配置等,然后内部根据这个配置对象去对整个项目工程进行打包,从一个js文件切入(此为单入口,当然也可以设置多入口文件打包),将该文件中所有的依赖的文件通过特定的loader和插件都会按照我们的需求为我们打包出来,这样在面对

js常用工具库XCLJsTool v1.0发布

最近有空,整了一个js的工具库,还没有正式用于项目中,自己也没有时间写测试用例,想了一下,还是贴出来给大家看看,如果有问题,请留言,非常感谢!项目我放在了github上面,会经常更新的,过段时间会发布一版! /** * 欢迎使用本程序,您可以任意修改.复制.分享本程序所有代码,只需要保留本注释即可,谢谢! * 项目地址:<span style="color:#ff0000;">https://github.com/xucongli1989/XCLJsTool</spa

FunDA:一个开源的函数式数据处理工具库,也是Slick的补充

如果你是一个Slick用户,或者你是一个数据库编程人员正在尝试进入函数式编程模式,那么FunDA可能会帮到你. 目前市面上FRM(Functional Relational Mapper),即函数式的数据库处理工具库的选择并不多,Typesafe公司的Slick可能是最通用的选择了.整体上来说:Slick还是一个不错的函数式数据库编程工具,用scala语言,很多地方引用了函数式的抽象模式和对象(functional abstractions and objects).但是,FRM是一种偏重数据读

一个简易的便签工具:探索窗体之间传值和传引用的方法

简单的便签工具:实现了基于文本的便签信息的浏览,删除,添加.可以查看时间,实时更新数据. 这个便签工具完全基于面向对象的编程方式,首先定义Note类,然后使用NoteManager类进行便签的管理.其中的关键就是在NoteManager类中定义list<Note>泛型集合.原理上和ArrayList基本是一致的. NoteManager的工作原理: public List<Note> list;//定义一个泛型集合,并在构造函数中初始化. private int CurrentIn

Bean-Query 一个把对象转换为Map的Java工具库

刚开源了一个经过完整测试的Java工具类.目前的代码已经经历了完整的测试,正在申请放到Maven central Repository上. 地址如下: https://github.com/Jimmy-Shi/bean-query 使用说明如下: Bean-query Click Here for English version. BeanQuery 是一个把对象转换为Map的Java工具库.支持选择Bean中的一些属性,对结果进行排序和按照条件查询.不仅仅可以作用于顶层对象,也可以作用于子对象

C# 一个简易的Producer-Consumer工具类

一.关于本文 本文中实现的PCHelper类是一个简易的Producer-Consumer操作工具类.该类可以实现如下目标:由多个线程向其中的一个Queue中写入数据,同时由多个线程负责接收Queue中数据进行处理. 二.工具类代码 /// <summary> /// Producer-Consumer操作类 /// </summary> public class PCHelper {     readonly object listlock = new object(); //线

一个PHP高性能、多并发、restful的工具库(基于multi_curl)

This is high performance curl wrapper written in pure PHP. It's compatible with PHP 5.4+ and HHVM. Notice that libcurl version must be over 7.36.0, otherwise timeout can not suppert decimal. 这是一个高性能的PHP封装的HTTP Restful多线程并发请求库,参考借鉴了httpresful .multire

一个小巧但功能强大的跨平台命令行工具库Crossline

Crossline Crossline是一个很小的跨平台命令行工具库,类似Linux上的readline. 项目地址:https://github.com/JunchuanWang80/Crossline 因为开发一个项目需要支持跨平台命令行,在Linux上readline是首选,bash/gdb/ftp都使用了这个库,但是Windows上没法直接用.后来搜到了一个开源项目linenoise,这个命令行工具库是Redis的作者开发的,Redis,Andriod和MongoDB都使用了.这个工具库