Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wjw-gavin/native-lodash
Popular front-end utility library, written in TypeScript.
https://github.com/wjw-gavin/native-lodash
front-end lodash typescript utilities
Last synced: 2 months ago
JSON representation
Popular front-end utility library, written in TypeScript.
- Host: GitHub
- URL: https://github.com/wjw-gavin/native-lodash
- Owner: wjw-gavin
- License: mit
- Created: 2022-09-08T02:24:24.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-23T15:19:40.000Z (2 months ago)
- Last Synced: 2024-10-24T18:15:06.050Z (2 months ago)
- Topics: front-end, lodash, typescript, utilities
- Language: TypeScript
- Homepage:
- Size: 758 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 说明
前端常用的工具库,`typescript` 编写。
# 安装使用
方式1: 通过 CDN 引入
```html
console.log(nativeLodash)
// 手机号脱敏
const mobile = '18688888888'
console.log(nativeLodash.desensitize(mobile))
// => 186****8888// 金额格式化
const money = 3002.345
console.log(nativeLodash.moneyFormat(money))
// => '3,002'
console.log(nativeLodash.moneyFormat(money, 2))
// => '3,002.25'```
方式2: 通过 pnpm | yarn | npm 安装
```js
// pnpm | yarn
pnpm(yarn) add native-lodash// 使用
import { desensitize, moneyFormat } from 'native-lodash'// 手机号脱敏
const mobile = '18688888888'
console.log(desensitize(mobile))
// => 186****8888// 金额格式化
const money = 3002.345
console.log(moneyFormat(money))
// => '3,002'
console.log(moneyFormat(money, 2))
// => '3,002.25'
```# 使用文档
1. [isX](#isx)
1. [clipboard](#clipboard)
1. [cloneDeep](#clonedeep)
1. [debounce](#debounce)
1. [delay](#delay)
1. [desensitize](#desensitize)
1. [download](#download)
1. [downloadImage](#downloadimage)
1. [eq](#eq)
1. [flattenDeep](#flattendeep)
1. [getUa](#getua)
1. [getUrlAllParams](#geturlallparams)
1. [getUrlParams](#geturlparams)
1. [groupBy](#groupby)
1. [guid](#guid)
1. [has](#has)
1. [later](#later)
1. [moneyFormat](#moneyformat)
1. [omit](#omit)
1. [queryParams](#queryparams)
1. [throttle](#throttle)
1. [timeFormat](#timeformat)
1. [timeFrom](#timefrom)
1. [toFixed](#tofixed)
1. [trim](#trim)
1. [uniqBy](#uniqby)### isX
```js
/**
* @description 常用的校验方法
* @return Boolean
*/// 使用
import { isEqual } from 'native-lodash'const obj = { name: 'a' }
const other = { name: 'a' }
const deepObj = { a: 'a', b: { c: 'c' } }
const deepOther = { a: 'a', b: { c: 'c' } }isEqual(obj, other)
// => trueisEqual(deepObj, deepOther)
// => true// 同理
isEmail // 是否是邮箱
isMobile // 是否是手机号
isString // 是否是字符串
isIdCard // 是否是身份证号
isCarNo // 是否是车牌号,包括新能源
isEmpty // 是否是空的值:字符串、对象、数组
isObject // 是否是对象
isArray // 是否是数组
isCode // 是否是验证码,长度默认为6,第二个参数可修改 code 的校验长度
isFunction // 是否是函数
isTrue // 是否是布尔 true 或者是字符 'true'
isURL // 是否是 URL
inBrowser // 是否在浏览器
```### clipboard
```js
/**
* @description 剪贴板,返回一个 Promise
*/// 使用
import { clipboard } from 'native-lodash'// 必须由用户主动触发
const handleClipboard = async () => {
await clipboard()
// something...
}
```### cloneDeep
```js
/**
* @description 深度克隆
* @param {object} obj 需要深度克隆的对象
* @returns {*} 克隆后的对象或者原值
*/// 使用
import { cloneDeep } from 'native-lodash'const obj = { name: 'Gavin' }
const cloneObj = obj
cloneObj.name = 'wjw'
obj === cloneObj // => trueconst cloneDeepObj = cloneDeep(obj)
cloneDeepObj.name = 'wjw'
obj === cloneDeepObj // => false
```### debounce
```js
/**
* @description 创建一个 debounced(防抖)函数,该函数会在延迟 wait 毫秒后调用 fn 方法
* @param {Function} fn 需要防抖的函数
* @param {number} ms 毫秒数
* @param {immediate} ms 是否立即执行,默认 false
*/// 使用
import { debounce } from 'native-lodash'// 避免窗口在变动时出现昂贵的计算开销。
jQuery(window).on('resize', debounce(updateFun, 300))
```### delay
```js
/**
* @description 延迟 wait 毫秒后调用 fn。 调用时,任何附加的参数会传给func。
* @param {Function} fn 要延迟的函数
* @param {number} wait 要延迟的毫秒数
* @param {...*} [args] 会在调用时传入到 fn 的参数。
* @returns {number} 返回计时器 id
*/
```### desensitize
```js
/**
* @description 字符串脱敏(手机号,身份证,银行卡号、姓名等)
* @param {String|Number} value 要脱敏的数据
* @param {Number} start 前几位不参与脱敏,默认 3
* @param {Number} end 后几位不参与脱敏,默认 4
* @returns {String} 脱敏后的字符串
*/// 使用
import { desensitize } from 'native-lodash'// 手机号脱敏
const mobile = '18688888888'
desensitize(mobile)
// => 186****8888// 名字脱敏
const mobile = '王小二'
desensitize(mobile, 1, 1)
// => 王*二
```### download
```js
/**
* @description: 根据地址使用 a 标签下载文件
* 如需下载图片请使用 downloadImage
* @param {String} href 文件链接
* @param {String} title 文件名称
*/// 使用
import { download } from 'native-lodash'download(href, title)
```### downloadImage
```js
/**
* @description: 根据图片地址下载图片
* @param {String} src 图片地址
* @param {String} title 下载图片名称
*/// 使用
import { downloadImage } from 'native-lodash'downloadImage(src, title)
```### eq
```js
/**
* @description 使用 SameValueZero 比较两者的值,来确定它们是否相等。
* @param {*} value 要比较的值
* @param {*} other 另一个要比较的值
* @returns {boolean}
*/// 使用
import { eq } from 'native-lodash'const object = { a: 1 }
const other = { a: 1 }eq(object, object)
// => trueeq(object, other)
// => falseeq('a', 'a')
// => trueeq('a', Object('a'))
// => falseeq(NaN, NaN)
// => true
```### flattenDeep
```js
/**
* @description 将array递归为一维数组。
*/// 使用
import { flattenDeep } from 'native-lodash'flattenDeep([1, [2, [3, [4]], 5]])
// => [1, 2, 3, 4, 5]
```### getUa
```js
/**
* @description 获取当前网页所在的运行环境
* @return
| 'ios' // ios
| 'android' // android
| 'wechat' // 微信
| 'wxwork' // 企微
| 'wxmini' // 微信小程序
| 'dingding' // 钉钉
| 'feishu' // 飞书
| 'mobile' // 移动端
| undefined // 不是以上情况
*/// 使用
import { getUa } from 'native-lodash'const ua = getUa()
// => ios
```### getUrlAllParams
```js
/**
* @description 获取 url 中所有参数
*/// 使用
import { getUrlAllParams } from 'native-lodash'const url = 'https://www.baidu.com?name=gavin&age=18'
getUrlAllParams(url)
// { name: 'gavin', age: '18'}
```### getUrlParams
```js
/**
* @description 获取 url 中所有参数
*/// 使用
import { getUrlParams } from 'native-lodash'const url = 'https://www.baidu.com?name=gavin&age=18'
getUrlParams('name', url)
// gavingetUrlParams('age', url)
// 18
```### groupBy
```js
/**
* @description 对象数组根据某个字段分类,常用于 index 索引列表
* @param {Array} array 必须是对象数组
* @param {string} property 分类依据的字段
*/// 使用
import { groupBy } from 'native-lodash'const arr = [
{
id: 1,
state: 'online',
create_time: '2022-04-24'
},
{
id: 2,
state: 'online',
create_time: '2022-04-23'
},
{
id: 3,
state: 'online',
create_time: '2022-04-23'
},
{
id: 4,
state: 'online',
create_time: '2022-04-22'
}
]groupBy(arr, 'create_time')
// =>
// {
// '2022-04-24': [
// { id: 1, state: 'online', create_time: '2022-04-24' }
// ],
// '2022-04-23': [
// { id: 2, state: 'online', create_time: '2022-04-23' },
// { id: 3, state: 'online', create_time: '2022-04-23' }
// ],
// '2022-04-22': [
// { id: 4, state: 'online', create_time: '2022-04-22' }
// ]
// }
```### guid
```js
/**
* @description 全局唯一标识
* @param {Number} len uuid的长度
* @param {Boolean} firstLetter 将首位设置为某个字母,默认为 u
* @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制,默认62
*/// 使用
import { guid } from 'native-lodash'guid(16)
// => 随机16为字符串guid(16, 'g')
// => 首位字符为'g'的16为字符串
```### has
```js
/**
* @description 检查 path 是否是 Object 的直接或继承属性
*/// 使用
import { has } from 'native-lodash'const object = { a: 1, b: 'settings', c: { d: 'test' } }
const result = has(object, 'a')
// => trueconst result = has(object, 'c.d')
// => true
```### later
```js
/**
* @description 延迟 later 毫秒后执行,返回 Promise。
* @param {number} later 要延迟的毫秒数
* @returns {Promise} Promise
*/// 使用
import { later } from 'native-lodash'// 1000ms 后继续执行
await later(1000)
// ...
```### moneyFormat
```js
/**
* @description 金额格式化
* @param {number|string} number 要格式化的数字
* @param {number} decimals 保留几位小数
* @returns {string} 格式化后的数字
*/// 使用
import { moneyFormat } from 'native-lodash'moneyFormat(3002.2345)
// => 3,002moneyFormat(3002.245, 2)
// => 3,002.25
```### omit
```js
/**
* @description 返回一个对象,这个对象由忽略属性之外的 Object 自身和继承的可枚举属性组成。(注:可以理解为删除 Object 的属性)。
* @param {Object} object 目标对象.
* @param {string|string[]} props 要被忽略的属性
* @returns {Object} 返回新对象
*/// 使用
import { omit } from 'native-lodash'const object = { a: 1, b: '2', c: 3 }
omit(object, ['a', 'c'])
// => { 'b': '2' }omit(object, 'a')
// => { 'b': '2', 'c': 3 }
```### queryParams
```js
/**
* @description 对象转 url 参数
* @param {object} data, Object
* @param {Boolean} isPrefix,是否自动加上"?"
* @param {string} arrayFormat 规则 indices|brackets|repeat|comma,默认 brackets
* e.g. { ids: [1, 2, 3] }
* indices: ids[0]=1&ids[1]=2&ids[2]=3
* brackets: ids[]=1&ids[]=2&ids[]=3
* repeat: ids=1&ids=2&ids=3
* comma: ids=1,2,3
*/// 使用
import { queryParams } from 'native-lodash'const query = {
a: 'a',
c: [1, 2, 3]
}queryParams(query)
// => ?a=a&c[]=1&c[]=2&c[]=3queryParams(query, true, 'indices')
// => ?a=a&c[0]=1&c[1]=2&c[2]=3'
```### throttle
```js
/**
* @description 创建一个节流函数,在 time 秒内最多执行 fn 一次的函数
* @param {Function} fn 要节流的函数
* @param {Number} time 需要节流的毫秒
*/// 使用
import { throttle } from 'native-lodash'// 避免在滚动时过分的更新定位
jQuery(window).on('scroll', throttle(updateFun, 300))
```### timeFormat
```js
/**
* @description 格式化时间
* @param {String|Number} timestamp 需要格式化的时间戳
* @param {String} format 格式化规则 yyyy-mm-dd hh:MM:ss,可自定义组合 默认 yyyy-mm-dd
* @returns {string} 返回格式化后的字符串
*/// 使用
import { timeFormat } from 'native-lodash'const timestamp = Date.now()
timeFormat(timestamp)
// => 2022-12-22timeFormat(timestamp, 'yyyy/mm/dd')
// => 2022/12/22
```### timeFrom
```js
/**
* @description 时间戳转为多久之前
* @param {String | Number} timestamp 时间戳
* @param {String} format 格式化规则,超出一定时间范围,返回固定的时间格式,同 timeFormat 中 format
* @returns {string} 转化后的内容
*/// 使用
import { timeFrom } from 'native-lodash'const timestamp = Date.now()
timeFrom(timestamp)
// => 刚刚// 根据时间差显示为:刚刚;几分钟前;几小时前;昨天;几天前;再往前显示如下说明:
// 如果判断format有值,则再往前的时间显示为 format 格式,否则继续显示几个月前、几年前。
```### toFixed
```js
/**
* @description: 重写 toFixed
* 原因:比如 0.345.toFixed(2) = 0.34 而非 0.35
* digit: 保留位数,默认2位
* @param {String | Number} num 数值
* @param {Number} digit 保留位数,默认2位
* @return {String}
*/// 使用
import { toFixed } from 'native-lodash'const date = new Date()
// 原生:0.345.toFixed(2) = 0.34
toFixed(0.345, 2)
// => 0.35toFixed(0.345, 0)
// => 0
```### trim
```js
/**
* @description 去除空格
* @param String str 需要去除空格的字符串
* @param String pos both(两端)|left|right|all 默认both
*/// 使用
import { trim } from 'native-lodash'trim(' 12 12 ')
// => '12 12'trim(' 12 12 ', 'left')
// => '12 12 'trim(' 12 12 ', 'right')
// => ' 12 12'trim(' 12 12 ', 'all')
// => '1212'
```### uniqBy
```js
/**
* @description 调用数组的每个元素以产生唯一性
* @param {Array} arr 要去重的数组
* @param {*} it 迭代函数要调用的元素
* @returns {Array} 返回新的去重后的数组
*/// 使用
import { uniqBy } from 'native-lodash'// 数组元素为基本类型去重
uniqBy([1, 3, 4, 5, 5, 4])
// => [1, 3, 4, 5]const arr = [
{ id: 1, name: 'cat' },
{ id: 2, name: 'dog' },
{ id: 3, name: 'tiger' },
{ id: 1, name: 'sheep' }
]// 数组元素为对象去重
uniqBy(arr, 'id')
// =>
// [
// { id: 1, name: 'cat' },
// { id: 2, name: 'dog' },
// { id: 3, name: 'tiger' }
// ]
```# 参考
[lodash](https://lodash.com)
[uview](https://www.uviewui.com)