Lodash 已过时,试试它吧!

article/2025/8/4 21:23:49

来自公众号:前端界

来自公众号:前端界

开篇之前,先提两个问题:

  • 你知道 Radash吗?

  • Radash会取代 Lodash吗?

你知道 Radash吗?

Radash会取代 Lodash吗?

相信大家都知道Lodash, 这个 Java 工具库从2012至今,已经存在长达12年的时间,它在github上的 star 数超过 58.6k, 在 npm 上每周的下载量已超过 5200 万。

最初,Lodash的运行情况很好,帮助开发人员编写了简洁、可维护的 Java 代码。然而,由于近两年没有针对最新 Java 函数进行重大更新,开发人员在使用Lodash时开始面临一些挑战,在这样的背景下,Radash应运而生,以其现代化的特性和对Type的友好支持,逐渐成为开发者的新宠。

在本文中,我将详细讨论Lodash中的问题以及Radash如何解决这些问题,从而回答提出的问题:Radash会取代Lodash吗?

Lodash 面临的问题

随着 Java 语言的不断进化和新特性的引入,Lodash的一些功能开始显得不再那么必要。

Lodash 函数过时了

随着ES6及后续版本的推出,Java 引入了许多新的语言特性,如可选链(?.)和空值合并(??),使得一些Lodash的函数显得多余。

在 ES6 之前,如果你想安全地访问对象的嵌套属性,可以使用Lodash的_.get函数来避免可能的undefined错误。例如:

//假设我们有一个对象,我们想访问`a.b.c`属性

constobj={

a:{

b:{

c:'Hello'

}

}

};

//使用Lodash的_.get来安全地获取值

constvalue=_.get(obj,'a.b.c','Default');console.log(value);

//输出:'Hello'

如果obj中的任何中间属性是undefined或null,_.get将返回提供的默认值'Default',而不是抛出错误。

然而,随着 ES6 引入了可选链操作符?.,我们现在可以更简洁地实现同样的功能,而不需要Lodash:

//使用可选链操作符来安全地访问嵌套属性

constvalue=obj?.a?.b?.c||'Default';

console.log(value);

//输出:'Hello'

同样的,像.filter、.map和_.size这样的函数也变得多余了。并且,在性能方面,像可选链?.这样的特性远远超过了Lodash函数,可选链的性能几乎Lodash的_.get函数的两倍(根据能测量工具:measurethat.net的测试结果)。

源码可读性差

实话说,上面所谈到的,作为开发者的你也许可以接受,但是Lodash源码的学习成本真的很高,这可能才是我们的底线。这是 Lodash源码

我们不应该为了了解一个单行函数是如何工作的,而去翻阅 15000 行代码,为了学习 API。

我们不应该为了了解一个单行函数是如何工作的,而去翻阅 15000 行代码,为了学习 API。

image.png

几年前,相信大家经常看到过这样解读Lodash的文章。

以前,我也曾花费不少时间挖掘源代码,学习每一个 API,记录每一个函数调用,理解得足够透彻,为了能够回答一个简单的面试问题,比如isNumber函数是如何工作的?

Radash 的崛起

Radash,这个新兴的工具库,以其现代化的设计和对Type的原生支持,迅速吸引了开发者的注意。

虽然Radash是新产品,但它在 GitHub 上的star数已超过 2.8K,拥有 99 个 Forks,每周的 NPM 下载量超过 7.6 万。您可以使用 NPM 或 Yarn 轻松安装Radash。

Radash的特点包括:

  • 零依赖: Radash不依赖于任何第三方库,使得项目更加轻量级。

  • Type友好: Radash完全使用Type编写,提供了准确的类型定义。

  • 现代化功能: Radash去除了 Lodash中一些过时的函数,并引入了许多新的实用功能。

  • 易于理解和维护: Radash的源代码易于理解,对新手友好。

零依赖: Radash不依赖于任何第三方库,使得项目更加轻量级。

Type友好: Radash完全使用Type编写,提供了准确的类型定义。

现代化功能: Radash去除了 Lodash中一些过时的函数,并引入了许多新的实用功能。

易于理解和维护: Radash的源代码易于理解,对新手友好。

值得👍的是,源代码的维护真的将新人的易懂性放在首位。在大多数情况下,如果你想使用Radash函数,但又不想安装,你可以直接从 GitHub 复制。

例如下面这段源代码:

exportconstunique=<T,Kextendsstring|number|symbol>(

array:readonlyT[],

toKey?:(item:T)=>K

):T[]=>{

constvalueMap=array.reduce((acc,item)=>{

constkey=toKey?toKey(item):(itemasanyasstring|number|symbol)

if(acc[key])returnacc

acc[key]=item

returnacc

},{}asRecord<string|number|symbol,T>)

returnObject.values(valueMap)

}

定义了一个名为unique的泛型函数,目的是从输入数组中提取唯一的元素。函数接受两个参数:一个类型为readonly T[]的只读数组array,以及一个可选的映射函数toKey, 相信很多初级的开发者都可以看懂。

另外,如果你项目只需要一个unique函数,完全可以将源码复制到自己的工具文件中来使用。

目前Radash已经提供 90多个实用函数。

可以后台回复【Radash】,获取每个函数的详细介绍

可以后台回复【Radash】,获取每个函数的详细介绍

下面我们将介绍几个特别实用的函数:

tryit

tryit函数可能是我最喜欢的Radash函数。tryit函数可以包装一个函数,将其转换为错误优先函数。适用于异步和同步功能。

import{tryit}form"radash"

const[err,user]=awaittryit(api.users.userInfo)(userId)

我发现它是对代码整洁最大提升的代码。不再需要为了尝试某些操作而分叉控制流。不再需要在try块外部创建一个可变的let变量,在里面设置它,然后在之后检查它。

range

range可以取代传统的循环。例如,假设您需要打印从 1 到 5 的数据,如果使用传统的 for 循环,就会像下面这样:

for(leti=1;i<=5;i++){

console.log(i);

}

但是,使用Radash的range函数,您可以省略所有变量声明、条件和增量。

import{range}from'radash';

for(constiofrange(1,5)){

console.log(i);

}

list

list函数可以根据提供的参数动态生成列表。这个函数支持1到4个输入参数,包括起始值、结束值、映射函数和步长。

import{list}from'radash';

constmyList=list(1,10,(i)=>i*2,2);

console.log(myList);//输出:[2,4,6,8,10]

在这个例子中,list函数创建了一个从2开始,每次增加2,到10结束的列表。

counting

counting函数用于统计类数组集合中各类元素的数量。它接收一个对象数组和一个回调函数,通过回调函数定义计数条件。

import{counting}from'radash';

constitems=[

{category:'A'},

{category:'B'},

{category:'A'},

{category:'C'}

];

constcounts=counting(items,(item)=>item.category);

console.log(counts);//输出:{A:2,B:1,C:1}

在项目中,我发现自己使用counting的次数比自己想象得要多。

除了上面这些有特色的方法,还有很多实用的方法, 例如:

  • 节流 throttle和防抖 debounce

  • 类型判断方法,如 isArray、 isString、 isNumber等

  • 对象操作 pick、 omit、 clone等

节流 throttle和防抖 debounce

类型判断方法,如 isArray、 isString、 isNumber等

对象操作 pick、 omit、 clone等

还有很多非常实用的方法, 大家可以通过官网查阅:

image.png

在这篇文章中,讨论了不喜欢Lodash的原因,以及可能倾向Radash等替代品的原因。但是,与新的竞争对手相比,Lodash仍然拥有庞大的用户群,并在许多大型项目中得到广泛应用。

我已经在项目中使用了, 如果你使用遇到问题,欢迎找我一起讨论😊

看完上面的分析,新项目中你会选择这个现代化替代品Radash吗?

参考文章:

https://medium.com/exobase/lodash-is-dead-long-live-radash-d9d52abf428b

---END---


http://www.hkcw.cn/article/RtBZmEJghp.shtml

相关文章

北京的春夜里,我们和荒木经惟策展人聊了聊荒木的樱花。

「荒木经惟,樱花与我」分享活动现场 本周三晚,知日ZHIJAPAN「荒木经惟,樱花与我」分享活动,在北京侨福芳草地中信书店举行。感谢北京读者朋友们的热情支持! 策展人本尾久子、「艺术北京」艺术总监金岛隆弘、知日内容监制原口纯子与大家分享了荒木经惟与樱花的故事。本尾女…

《中餐厅》首播,对比虞书欣、姜妍,资本塞人的做派,太恶心了!

新一季的《中餐厅》,准时在夏天和观众见面。 对比前几季嘉宾,这一季的阵容堪称豪华。 黄晓明依旧稳坐店长之位,稳住大局。好兄弟尹正也再次回归,助他一臂之力。 美厨娘姜妍,在千呼万唤中终于上了这档节目! 元气虞书欣,填上这一季的小花的位置,扛住话题度。连专业主厨节…

白杨SEO:5118工具怎么用(5118使用攻略)与5118会员价格及哪里买便宜?

先简单说说与5118缘分 第一次知道这个5118工具(准确的说法是5118网站)大概是2016年,当时应该是想要找关键词挖掘工具看到的。从那以后一直在用,不过也是与站长工具,爱站工具一起用着,把它当成是一个网站SEO工具。第一次写5118这个工具文章是2018年,也就是这个公众号正式…

鲁夫人:妖艳春秋,兄妹乱伦,却也是最富有才华和治国能力的美人

公元前694年,齐国都城临淄城南的牛山,齐王行宫中载歌载舞,一片欢快气氛。 齐国国君齐襄公正在设宴招待他的妹夫、鲁国国君鲁桓公。襄公作为东道主,殷勤地劝着心情低落的鲁桓公多喝几杯。众大臣多有眼力劲儿,一看襄公如此盛情,赶忙轮流把盏,娇滴滴的宫娥也在旁边伺候着。…

一文带你了解什么是BIM族:作用、分类和快速调用方法

BIM族,也称为构件族。BIM族有什么作用?有哪些分类,如何在项目中快速调用?下面,我们一起来看看。 BIM族的作用 随着BIM技术的不断发展,BIM族的应用范围和功能也在不断拓展和完善。BIM族主要具有以下作用: 1.构成BIM设计的基本要素:BIM族是BIM项目的组成部分,是参数信息…

7月26日 超级英雄大片《死侍与金刚狼》天生一队,拯救世界!

备受期待的漫威新片《死侍与金刚狼》(死侍3)正式官宣定档7月26日,中国内地将同步北美上映。这部影片是《死侍》系列回归漫威电影宇宙的首部作品,依旧被划分为 R 级。影片:《死侍与金刚狼》 上映日期: 2024-07-26(美国/中国大陆) 导演: 肖恩利维 编剧: 肖恩利维/温蒂莫利纽…

震惊!南宁女大学生为借钱竟拍裸照,录裸视频!

前段时间震惊全国的女大学生“裸条”贷款,如今竟在南宁也出现了!南宁女大学生小丽(化名),因在各网络平台借款太多,成了“网黑”。为了还清欠款,她不惜接受一些非法贷款者“裸条”贷款的条件。小丽在大一上学期想要一台笔记本电脑,但又不想找父母拿钱。就在网上的一个借…

樱花动漫 - 让您的二次元世界更加精彩

樱花动漫是一款专为动漫爱好者打造的在线观看平台,让您随时随地畅享精彩的动画作品。在这里,您可以找到各种热门、经典以及小众的动漫资源,满足您对于二次元世界的所有期待。那么,樱花动漫究竟有哪些亮点呢?让我们一起去一探究竟吧! 一、海量资源,应有尽有 樱花动漫拥有…

女子抱着孩子打麻将,为避免孩子哭闹竟当着三位男性麻友的面哺乳

近日,一则拍摄自某地棋牌室的视频在网络被大量转发,视频中的画面令人大跌眼镜,网友们一边咋舌称奇,一边感叹实在难以接受。视频中,一位抱着幼子的妈妈正和三位男性坐在麻将桌旁搓麻将,而让人难以置信的是,这位妈妈在打麻将的同时,还敞着怀哺乳着自己的孩子。只为不让孩…

Smallpdf——一个免费、高效的PDF文件万能处理工具

PDF应该是我们除了docx以外用的最多的文档格式了,于是很多时候pdf转word以及pdf修改和签名等相关功能也就成了刚需。但是为了转一两个pdf就去下载一堆什么迅捷转换等其他奇奇怪怪的软件回来就很不值得了,一来要忍受广告二来又要收费,功能还非常鸡肋,所以非常不建议去下载这…

PDF文件如何压缩体积大小?介绍七个压缩效果实测很好的方法

目前因为在平时的工作和学习过程中,遭遇到PDF文件的概率变得非常多!然而,因为在某些时刻,又会因为PDF文件的大小实在是太大了,不方便传输、存储和分享。所以这个时候通过压缩PDF文件,可以更高效地处理、分享和存储文件,提高工作和生活中的数字化体验。较小的文件大小意味…

原创太平公主为什么败亡的如此容易

太平公主是整个大唐无论如何都绕不过去的厉害人物,她是武则天和李治最疼爱的小女儿,武周朝唯一的公主,神龙政变的关键人物,史上独一无二的“镇国太平公主”。后来又与侄子李隆基发动唐隆政变,诛杀韦后集团,拥立李旦复位而晋封万户,为唐朝公主权势之顶峰。然而这样一位权…

全了解俄罗斯最大搜索引擎Yandex

: 你可能只听说过进入俄罗斯市场需要依赖Yandex,但你真正了解它的强大之处吗?今天就让我们全面揭秘Yandex,看看它是如何在俄罗斯市场独领风骚的。 首先,Yandex是俄罗斯最强大的搜索引擎,占据了俄罗斯超过64%的市场份额。在全球范围内,Yandex位列世界五大搜索引擎之列,仅…

【功能上新】搜狐号可以设置「个性化路径」啦,快来体验你的专属域名吧!

大家好哇,小狐又带着好消息来了,搜狐号「个性化路径」设置功能上线啦!通过这个功能,您可以根据自己的喜好和账号定位,自由设定账号主页的分享链接。这样一来,不仅可以彰显账号的个性化和独特性,还能让用户加深印象,绝对是一个超棒的创作利器(๑∀๑)! 接下来,就让小狐…

PDCA四步法,轻松搞定任何事!

PDCA循环,一个老话题了,大家都知道要这么做,但在平时的生活和工作当中,你是否真的都这样做呢?当你发现你面对的困难重重,寸步难行时,是否反思过是因为自己一开始的方法就不正。 本文包涵了PDCA循环的背景、内涵、特点、四大阶段八大步骤、PDCA在HR管理(招聘、培训、绩效…

2024上海人才引进落户指南:一网通办申报操作流程!

现在人才引进落户上海已经成为落户上海的主要方式,人才引进落户上海不能个人申报,只能由用人申报,先在一网通办提交申请,那你知道如何提交申请吗?申请时需要注意哪些事项呢?一起来看看下面的操作指南吧!一、人才引进落户上海申请流程 1、主申请人准备好落户材料,把材料…

中国公民入境越南又被索要“小费”?中国领馆:拒绝,收集证据

2月21日,中国驻胡志明市总领馆发布消息提醒中国公民,越南政府明确禁止口岸公职人员收取“小费”。在越入出境时,均无需向当地公职人员支付“小费”。提醒指出,近日,中国驻胡志明市总领馆接到中国公民反映,在入境越南时被越方口岸工作人员索要“小费”。总领馆对此高度重视…

6个珍藏多年的资源网站,每个都是万里挑一,送给正需要的你!

很多人为方便基本上都会选择在百度页面上找资源,但是如果你经常搜索的话会发现,在百度上是很难找到自己预先想要的资源。 为此小编在这里为大家整理了6个我珍藏多年的资源网站,无论是办公常用的PPT模板还是影视资源网站都可以找到,感兴趣的小伙伴都可以去尝试下! 1、 资源…

告别熬夜,讯飞智文2.0助力大学生轻松搞定PPT

2024-08-12 10:41:37作者:姚立伟 进入大学校园,学生们面对的挑战之一便是如何高效地制作出既专业又吸引人的演示文稿,即PPT。随着大模型技术的崛起,传统的PPT制作方式正在被重新定义。8月12日,科大讯飞发布了依托星火大模型4.0能力的衍生生态应用,讯飞智文2.0。经过本次更…

揭秘亚洲色情帝国 - 日韩情色产业大比拼

正文:在亚洲这片土地上,有两个国家的色情产业尤为引人关注,那就是日本和韩国。这两个国家不仅在全球范围内拥有庞大的市场,而且在色情产品的制作和质量上也具有很高的水准。本文将对此进行深入探讨,以期揭示这个看似神秘的行业背后的真实面貌。 日本,作为全球最大的色情产…