radash 工具整理常用 API

正在替代 lodash 的新JS工具, 旧的 lodash 语法太老, 新的 radash 集合了 ES6 语法, 效率更高

安装 :

npm i radash

常用API整理 :

数组 API :

1. 数组排序 alphabetical 

按字母顺序, 正序倒序排列

import { alphabetical } from 'radash'const gods = [{name: 'Ra',power: 100},{name: 'Zeus',power: 98},{name: 'Loki',power: 72},{name: 'Vishnu',power: 100}
]alphabetical(gods, g => g.name) // => [Loki, Ra, Vishnu, Zeus]
alphabetical(gods, g => g.name, 'desc') // => [Zeus, Vishnu, Ra, Loki]

2. 取数组最大最小值 boil 

import { boil } from 'radash'const gods = [{name: 'Ra',power: 100},{name: 'Zeus',power: 98},{name: 'Loki',power: 72}
]boil(gods, (a, b) => (a.power > b.power ? a : b)) 
// => { name: 'Ra', power: 100 }

3. 拆分指定长度数组, 组成二维数组 cluster 

import { cluster } from 'radash'const gods = ['Ra', 'Zeus', 'Loki', 'Vishnu', 'Icarus', 'Osiris', 'Thor', 'Apollo', 'Artemis', 'Athena']cluster(gods, 3)
// => [
//   [ 'Ra', 'Zeus', 'Loki' ],
//   [ 'Vishnu', 'Icarus', 'Osiris' ],
//   ['Thor', 'Apollo', 'Artemis'],
//   ['Athena']
// ]

4. 统计数组元素出现的次数 counting 

import { counting } from 'radash'const gods = [{name: 'Ra',culture: 'egypt'},{name: 'Zeus',culture: 'greek'},{name: 'Loki',culture: 'greek'}
]counting(gods, g => g.culture) // => { egypt: 1, greek: 2 }

5. 获取数组的第一个元素, 如果不存在任何项目,则返回第一个项目或默认值 first 

import { first } from 'radash'const gods = ['ra', 'loki', 'zeus']first(gods) // => 'ra'
first([], 'vishnu') // => 'vishnu'

6. 展平多维数组 flat 

import { flat } from 'radash'const gods = [['ra', 'loki'], ['zeus']]flat(gods) // => [ra, loki, zeus]

7. 对数组对象以某个元素进行分组 group 

import { group } from 'radash'const fish = [{name: 'Marlin',source: 'ocean'},{name: 'Bass',source: 'lake'},{name: 'Trout',source: 'lake'}
]const fishBySource = group(fish, f => f.source)// 输出 fishBySource 
{"ocean": [{"name": "Marlin","source": "ocean"}],"lake": [{"name": "Bass","source": "lake"},{"name": "Trout","source": "lake"}]
}

8. 判断两个数组中元素是否有相同 intersects 

import { intersects } from 'radash'const oceanFish = ['tuna', 'tarpon']
const lakeFish = ['bass', 'trout']intersects(oceanFish, lakeFish) // => falseconst brackishFish = ['tarpon', 'snook']intersects(oceanFish, brackishFish) // => true

9. 获取数组最后一个元素 ,如果不存在任何项目,则返回最后一个项目或默认值 last 

import { last } from 'radash'const fish = ['marlin', 'bass', 'trout']const lastFish = last(fish) // => 'trout'
const lastItem = last([], 'bass') // => 'bass'

9. 返回数组中最大值 max 

import { max } from 'radash'const fish = [{name: 'Marlin',weight: 105,source: 'ocean'},{name: 'Bass',weight: 8,source: 'lake'},{name: 'Trout',weight: 13,source: 'lake'}
]max(fish, f => f.weight) // => {name: "Marlin", weight: 105, source: "ocean"}

10. 合并数组对象, 并覆盖相同 key 值的对象 merge 

import { merge } from 'radash'const gods = [{name: 'Zeus',power: 92},{name: 'Ra',power: 97}
]const newGods = [{name: 'Zeus',power: 100}
]merge(gods, newGods, f => f.name) 
// => [{name: "Zeus" power: 100}, {name: "Ra", power: 97}]

11. 返回数组中最小值 min 

import { min } from 'radash'const fish = [{name: 'Marlin',weight: 105,source: 'ocean'},{name: 'Bass',weight: 8,source: 'lake'},{name: 'Trout',weight: 13,source: 'lake'}
]min(fish, f => f.weight) // => {name: "Bass", weight: 8, source: "lake"}

12. 替换数组元素, 仅替换第一个匹配项 replace 

import { replace } from 'radash'const fish = [{name: 'Marlin',weight: 105},{name: 'Bass',weight: 8},{name: 'Trout',weight: 13}
]const salmon = {name: 'Salmon',weight: 22
}// read: replace fish with salmon where the name is Bass
replace(fish, salmon, f => f.name === 'Bass')// 输出
[{"name": "Marlin","weight": 105},{"name": "Salmon","weight": 22},{"name": "Trout","weight": 13}
]

13. 数组元素整体向右移动 n 个位置 shift 

import { shift } from 'radash'
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
shift(arr, 3) // => [7, 8, 9, 1, 2, 3, 4, 5, 6]

14. 过滤出数组中虚假的元素 sift 

import { sift } from 'radash'const fish = ['salmon', null, false, NaN, 'sockeye', 'bass']sift(fish) // => ['salmon', 'sockeye', 'bass']

15. 数组排序, 按照数字大小正序倒序排列 sort 

import { sort } from 'radash'const fish = [{name: 'Marlin',weight: 105},{name: 'Bass',weight: 8},{name: 'Trout',weight: 13}
]sort(fish, f => f.weight) // => [bass, trout, marlin]
sort(fish, f => f.weight, true) // => [marlin, trout, bass]

16. 数组元素求和 sum 

import { sum } from 'radash'const fish = [{name: 'Marlin',weight: 100},{name: 'Bass',weight: 10},{name: 'Trout',weight: 15}
]sum(fish, f => f.weight) // => 125

17. 数组删除和添加元素, 已包含则删除, 未包含则添加 toggle 

import { toggle } from 'radash'const gods = ['ra', 'zeus', 'loki']toggle(gods, 'ra')     // => [zeus, loki]
toggle(gods, 'vishnu') // => [ra, zeus, loki, vishnu]

18. 数组去重 unique 

import { unique } from 'radash'const fish = [{name: 'Marlin',weight: 105,source: 'ocean'},{name: 'Salmon',weight: 22,source: 'river'},{name: 'Salmon',weight: 22,source: 'river'}
]unique( fish, f => f.name )
// [
//     { name: 'Marlin', weight: 105, source: 'ocean' },
//     { name: 'Salmon', weight: 22, source: 'river' }
// ]

19. 两个数组合并成一个数组对象 zipToObject 

import { zipToObject } from 'radash'const names = ['ra', 'zeus', 'loki']
const cultures = ['egypt', 'greek', 'norse']zipToObject(names, cultures)
// => { ra: egypt, zeus: greek, loki: norse }zipToObject(names, (k, i) => k + i)
// => { ra: ra0, zeus: zeus1, loki: loki2 }zipToObject(names, null)
// => { ra: null, zeus: null, loki: null }

20. 两个数组压缩成一个二维数组 zip 

import { zip } from 'radash'const names = ['ra', 'zeus', 'loki']
const cultures = ['egypt', 'greek', 'norse']zip(names, cultures)
// => [
//   [ra, egypt]
//   [zeus, greek]
//   [loki, norse]
// ]

21. 获取数组随机元素 draw 

import { draw } from 'radash'const fish = ['marlin', 'bass', 'trout']draw(fish) // => 随机值

22. 重新随机排列数组元素顺序返回 shuffle 

import { shuffle } from 'radash'const fish = [{name: 'Marlin',weight: 105,source: 'ocean'},{name: 'Salmon',weight: 22,source: 'river'},{name: 'Salmon',weight: 22,source: 'river'}
]shuffle(fish)

异步 API :

1. 将多个接口请求返回数据整合成一个数组 或 对象, 统一返回 all 

// 将数组作为参数传递将以相同的顺序将解析的 promise 值作为数组返回
import { all } from 'radash'const [user] = await all([api.users.create(...),s3.buckets.create(...),slack.customerSuccessChannel.sendMessage(...)
])// 将对象作为参数传递将返回一个对象,该对象具有与解析的 promise 值相同的键和值
import { all } from 'radash'const { user } = await all({user: api.users.create(...),bucket: s3.buckets.create(...),message: slack.customerSuccessChannel.sendMessage(...)
})

2. 不断重复请求, 可设置间隔时间, 直到请求成功或达到指定的最大重试次数 retry 

import { retry } from 'radash';  await retry({}, api.users.list)
await retry({ times: 10 }, api.users.list)await retry({ times: 2, delay: 1000 }, api.articles.list);// 在这个例子中,retry() 函数尝试执行 api.articles.list 异步操作,如果操作失败,它会等待 1000 毫秒(即 1 秒)后重试,最多重试 2 次。// 可以使用 retry() 函数来替代传统的异步重试库,因为它提供了更加简洁和灵活的接口。结合 Radash 的
// 其他功能,如 tryit、parallel 等,可以轻松构建出高效且健壮的异步处理逻辑,以应对后端服务的各种
// 不确定性。无论是处理网络请求、数据库操作还是其他异步任务,retry() 函数都能提供强大的容错能力,
// 确保应用程序的稳定性和可靠性

防抖 debounce  :

import { debounce } from 'radash'// 请求接口
const getUser = async () => {const { data } = await infUser()
}// 点击按钮
const handleTest = debounce({ delay: 2000 }, () => {// delay: 2000 间隔时间 毫秒 才请求getUser()
})

节流 throttle  :

import { throttle } from 'radash'// 请求接口
const getUser = async () => {const { data } = await infUser()
}const jieLiu = throttle({ interval: 2000 }, () => {// interval: 2000 间隔 2000 毫秒内只请求 1 次getUser ()
})

获取随机数字 random  :

import { random } from 'radash'random(0, 100) // => 0 到 100 之间随机数字

对象 API :

1. 合并两个对象 assign 

import { assign } from 'radash'const ra = {name: 'Ra',power: 100
}assign(ra, { name: 'Loki' })
// => { name: Loki, power: 100 }

2. 浅拷贝 clone 

import { clone } from 'radash'const ra = {name: 'Ra',power: 100
}const gods = [{name: 'Ra',power: 100}
]clone(ra) // => copy of ra
clone(gods) // => copy of gods

3. 对象 key 和 value 颠倒 invert 

import { invert } from 'radash'const powersByGod = {ra: 'sun',loki: 'tricks',zeus: 'lighning'
}invert(gods) // => { sun: ra, tricks: loki, lightning: zeus }

4. 获取对象所有 key 值 keys 

import { keys } from 'radash'const ra = {name: 'ra',power: 100,friend: {name: 'loki',power: 80},enemies: [{name: 'hathor',power: 12}]
}keys(ra)
// => [
//   'name',
//   'power',
//   'friend.name',
//   'friend.power',
//   'enemies.0.name',
//   'enemies.0.power'
// ]

5. 返回提取对象中指定元素, 组成新对象 pick 

import { pick } from 'radash'const fish = {name: 'Bass',weight: 8,source: 'lake',barckish: false
}pick(fish, ['name', 'source'])// 输出
{"name": "Bass","source": "lake"
}

6. 将对象所有 key 转为大写并返回 upperize 

import { upperize } from 'radash'const ra = {Mode: 'god',Power: 'sun'
}upperize(ra)// 输出
{"MODE": "god","POWER": "sun"
}

7. 将对象所有 key 转为小写并返回 lowerize 

import { lowerize } from 'radash'const ra = {Mode: 'god',Power: 'sun'
}// 输出
{"mode": "god","power": "sun"
}

字符串 API :

1. 将一串字符串以驼峰大小写格式返回 camel 

import { camel } from 'radash'camel('green fish blue fish') // => greenFishBlueFish

判断类型 API :

1. 是否数组 isArray

import { isArray } from 'radash'isArray('hello') // => false
isArray(['hello']) // => true

2. 是否日期 isDate 

import { isDate } from 'radash'isDate(new Date()) // => true
isDate(12)         // => false
isDate('hello')    // => false

3. 是否为空 isEmpty 

import { isEmpty } from 'radash'isEmpty([]) // => true
isEmpty('') // => true
isEmpty(null) // => true
isEmpty({}) // => true
isEmpty(0) // => true
isEmpty(NaN) // => true
isEmpty(undefined) // => trueisEmpty('hello')   // => false
isEmpty(['hello']) // => false

4. 是否相等 isEqual 

import { isEqual } from 'radash'isEqual(null, null) // => true
isEqual([], [])     // => trueisEqual('hello', 'world') // => false
isEqual(22, 'abc')        // => false

5. 是否浮点数 isFloat 

import { isFloat } from 'radash'isFloat(12.233)  // => true
isFloat(12)      // => false
isFloat('hello') // => false

6. 是否函数 isFunction 

import { isFunction } from 'radash'isFunction('hello') // => false
isFunction(['hello']) // => false
isFunction(() => 'hello') // => true

7. 是否数字 isNumber 

import { isNumber } from 'radash'isNumber('hello') // => false
isNumber(['hello']) // => false
isNumber(12) // => true

8. 是否对象 isObject 

import { isObject } from 'radash'isObject('hello') // => false
isObject(['hello']) // => false
isObject(null) // => false
isObject({ say: 'hello' }) // => true

9. 是否字符串 isString 

import { isString } from 'radash'isString('hello') // => true
isString(['hello']) // => false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品经理功法修炼(3)之产品设计

点击下载《产品经理功法修炼(3)之产品设计》 1. 前言 产品经理的能力修炼并非局限于某一技能的速成,而是需要全面参与到产品的整个生命周期中,通过不断的实践来逐步提升自己的各项能力。尽管在企业的日常运作中,我们不可能身兼数职去扮演每一个角色,但作为产品的核心负…

Go-Gin中优雅的实现参数校验,自定义错误消息提示

问题描述 在参数校验的时候我们一般会基于"github.com/go-playground/validator/v10"这个库给结构体加标签实现校验参数,当参数校验错误的时候,他的提示一般是英文的,怎么自定义参数错误提示呢?跟着我一步步来 注册校…

OpenAI 宣布, ChatGPT 网页端无需注册就能立即使用(2024年4月1日)

今天,OpenAI宣布,为了让更多人轻松体验人工智能的强大功能,现在无需注册账户即可立即使用 ChatGPT。这一变化是他们使命的核心部分,即让像 ChatGPT 这样的工具广泛可用,让世界各地的人们都能享受到 AI 带来的好处。 网…

PostgreSQL的学习心得和知识总结(一百三十五)|深入理解PostgreSQL数据库之查找 PostgreSQL C 代码中的内存泄漏

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

【苍穹外卖】SkyApplication类启动报错

报的这个错 The PoM for com.sky:sky-common:jar:1.0-SNAPSHoT is missing, no dependency information available Maven里重新install一下就好

01-​JVM学习记录-类加载器

一、类加载器子系统 1. 作用-运输工具(快递员) 负责从文件系统或者网络中加载Class文件(DNA元数据模板),Class文件开头有特定标识,魔术,咖啡杯壁(class文件存于本地硬盘&#xff0c…

Java 设计模式系列:备忘录模式

简介 备忘录模式是一种软件设计模式,用于在不破坏封闭的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定…

js动态替换字符串中所有匹配到的片段(replace + RegExp实现)

把字符串中匹配到的所有’A’替换成’哈’ <script>var text A12A34A56A789Avar result text.replace(new RegExp(A, g), 哈)console.log(result)//哈12哈34哈56哈789哈 </script>

版本排序,(如果 版本 是 1,1a,1.1a, 2, 2c , 1c , 1.2a, 3 , 5b , 5)进行排序

如果 版本 是 1&#xff0c;1a&#xff0c;1.1a&#xff0c; 2&#xff0c; 2c &#xff0c; 1c &#xff0c; 1.2a&#xff0c; 3 &#xff0c; 5b &#xff0c; 5 对上面的进行排序 利用 VersionComparator 导入依赖 <dependency><groupId>cn.hutool</groupId…

微信小程序开发学习笔记——4.8【小案例】初识wx.request获取网络请求并渲染至页面

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;4.8.【小案例】初识wx.request获取网络请求并渲染至页面_哔哩哔哩_bilibili up主提供的网络请求常用接口&#xff1a; 随机猫咪&#xff0c;用来获取一些…

【Kotlin】委托模式

1 委托模式简介 委托模式的类图结构如下。 对应的 Kotlin 代码如下。 fun main() {var baseImpl BaseImpl()var baseWrapper BaseWrapper(baseImpl)baseWrapper.myFun1() // 打印: BaseImpl, myFun1baseWrapper.myFun2() // 打印: BaseImpl, myFun2 }interface Base {fun my…

非关系型数据库(缓存数据库)redis的基础认知与安装

目录 一.关系型数据库和非关系型数据库 关系型数据库 非关系型数据库 关系数据库与非关系型数据库的区别 ①非关系数据 关系型数据库 非关系型数据库产生背景 数据存储流向 非关系型数据库 关系数据库 二.redis的简介 1.概念 2.Redis 具有以下几个优点: 3.Redi…

Nginx请求upstream timed out 错误时通常会尝试重新请求上游服务器(504 Gateway Timeout)

重新记录一下这个重复的nginx请求的问题&#xff1a; 背景 一个导出报表任务&#xff0c;下载报表时&#xff0c;发生了导出超时&#xff1a;504 Gateway Timeout的错误。 504 Gateway Timeout的原因如下&#xff1a; Nginx配置问题&#xff1a;检查您的Nginx配置是否正确。…

测斜仪在边坡安全监测中的重要作用

边坡作为土木工程和地质工程领域中常见的结构形式&#xff0c;其稳定性直接关系到工程安全以及人民生命财产的安全。因此&#xff0c;对边坡进行精确、及时的监测是至关重要的。在众多边坡监测仪器中&#xff0c;测斜仪以其独特的优势在边坡安全监测中发挥着重要的作用。 测斜仪…

uniapp:小程序腾讯地图程序文件qqmap-wx-jssdk.js 文件一直找不到无法导入

先看问题&#xff1a; 在使用腾讯地图api时无法导入到qqmap-wx-jssdk.js文件 解决方法&#xff1a;1、打开qqmap-wx-jssdk.js最后一行 然后导入&#xff1a;这里是我的路径位置&#xff0c;可以根据自己的路径位置进行更改导入 最后在生命周期函数中输出&#xff1a; 运行效果…

vivado 高级编程功能1

适用于 7 系列、 UltraScale 和 UltraScale FPGA 和 MPSoC 的回读和验证 为 7 系列器件生成已加密文件和已经过身份验证的文件 注释 &#xff1a; 如需获取其它信息 &#xff0c; 请参阅《使用加密确保 7 系列 FPGA 比特流的安全》 ( XAPP1239 ) 。 要生成加密比特流…

设计模式之代理模式解析(下)

4&#xff09;远程代理介绍 远程代理(Remote Proxy) 使客户端程序可以访问在远程主机上的对象&#xff0c;远程代理对象承担了大部分的网络通信工作&#xff0c;并负责对远程业务方法的调用。 5&#xff09;虚拟代理介绍 1.概述 虚拟代理(Virtual Proxy) 对于一些占用系统资…

Kong基于QPS、IP限流

Rate Limiting限流插件 https://docs.konghq.com/hub/kong-inc/rate-limiting/ 它可以针对consumer ,credential ,ip ,service,path,header 等多种维度来进行限流.流量控制的精准度也有多种方式可以参考,比如可以做到秒级,分钟级,小时级等限流控制. 基于IP限流 源码地址&…

零基础入门多媒体音频(7)-AAOS audio

概览 Android Automotive OS (AAOS) 是基于核心的 Android 音频堆栈打造&#xff0c;以支持用作车辆信息娱乐系统。AAOS 负责实现信息娱乐声音&#xff08;即媒体、导航和通讯&#xff09;&#xff0c;但不直接负责具有严格可用性和时间要求的铃声和警告。 虽然 AAOS 提供了信号…

【Python】 使用Apache Tika和Python实现zip、csv、xls等多格式文件文本内容提取

时间的电影 结局才知道 原来大人已没有童谣 最后的叮咛 最后的拥抱 我们红着眼笑 我们都要把自己照顾好 好到遗憾无法打扰 好好的生活 好好的变老 好好假装我 已经把你忘掉 &#x1f3b5; 五月天《好好》 在进行数据分析、搜索引擎优化或任何需要处理大量…