es-toolkit/fp 中的 union:在 pipe 流水线里合并去重的函数式操作符

发布时间:2026/11/11 23:03:56

es-toolkit/fp 中的 union:在 pipe 流水线里合并去重的函数式操作符 es-toolkit/fp 中的 union在 pipe 流水线里合并去重的函数式操作符【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkites-toolkit/fp的union是一个>import { union } from es-toolkit/array; const array1 [1, 2, 3]; const array2 [3, 4, 5]; union(array1, array2); // [1, 2, 3, 4, 5]而当你在用pipe组合一系列变换时则需要es-toolkit/fp下的这个柯里化版本。它的核心使用形态是const result pipe(array, union(secondArray));union(secondArray)先固定第二个数组返回一个等待数据传入的函数pipe把第一个数组作为数据流喂给这个函数。这种>import { pipe, union } from es-toolkit/fp; pipe([1, 2, 2], union([2, 3])); // [1, 2, 3]逐步拆解这个例子union([2, 3])返回一个函数(array: readonly T[]) T[]pipe将[1, 2, 2]作为array传入该函数两个数组合并得到[1, 2, 2, 2, 3]去重后得到[1, 2, 3]。[1, 2]来自第一个数组3来自secondArray重复的2只保留第一次出现的位置。再来看字符串数组与多元素场景import { pipe, union } from es-toolkit/fp; pipe([apple, banana, banana], union([banana, orange])); // [apple, banana, orange]参数secondArrayreadonly T[]在 pipe 传入的数组之后参与合并的数组。它被柯里化提前绑定因此可以在组件初始化或模块顶层预先构造好操作符复用于多条数据流。返回值(array: readonly T[]) T[]一个映射函数接收只读数组返回两个数组并集的新数组。该返回值正是pipe期望的操作符签名可直接插入流水线任意位置。类型签名export function unionT(secondArray: readonly T[]): (array: readonly T[]) T[];泛型参数T贯穿两个数组保证类型安全如果pipe传入number[]而secondArray是string[]TypeScript 会直接报类型错误而不是等到运行时才发现问题。底层实现柯里化委托与 Set 去重fp版的union实现非常简洁src/fp/array/union.tsimport { union as unionToolkit } from ../../array/union.ts; export function unionT(secondArray: readonly T[]): (array: readonly T[]) T[] { return function (array: readonly T[]): T[] { return unionToolkit(array, secondArray); }; }它本身不重复实现合并逻辑而是把参数顺序反转后委托给核心的unionsrc/array/union.tsexport function unionT(arr1: readonly T[], arr2: readonly T[]): T[] { return uniq(arr1.concat(arr2)); }核心union的合并过程分两步arr1.concat(arr2)先把两个数组拼接成一个数组不修改原数组返回新数组uniq(...)去除重复值。而去重本身又由uniq完成src/array/uniq.tsexport function uniqT(arr: readonly T[]): T[] { return [...new Set(arr)]; }uniq借助 JavaScript 内置的Set实现去重Set天然只保留不重复的元素[...new Set(arr)]再展开回数组。由于Set按插入顺序迭代结果自然保持首次出现顺序——这正是union文档所承诺的语义第一个数组的元素排前面secondArray的新元素按序补充在后。值得注意的是Set使用 SameValueZero 比较语义但NaN视为与自身相等因此union对NaN也能正确去重这是与基于indexOf/includes实现的一个重要差异。调用链可以概括为fp union(secondArray) ──► array union(array, secondArray) │ ├─► arr1.concat(arr2) └─► uniq ──► [...new Set(arr)]在 pipe 流水线中的定位fp版的union专为组合而生。除了pipe它还可以与flowsrc/fp/flow.ts等组合工具搭配且由于它是普通的一元函数操作符也能与任意自定义 unary 函数混合使用pipe的实现 src/fp/pipe.ts 接受任意(input) output函数。一个组合多个操作符的完整示例import { pipe, map, filter, union } from es-toolkit/fp; const result pipe( [1, 2, 3, 4, 5, 6], filter(x x % 2 0), // [2, 4, 6] map(x x * 10), // [20, 40, 60] union([50, 60, 70]) // [20, 40, 60, 50, 70] );关于性能有一个值得了解的细节pipe内部会把连续出现的可惰性函数如map、filter、take融合成单趟扫描见 src/fp/pipe.ts 中lazyPipe与chunkFunctions的实现。但union属于急切执行eager的操作符因为它依赖concat与Set构建完整数组无法按元素流式输出。因此实践中建议把union放在流水线的末端或靠后位置让前面的filter/map/take先完成惰性融合与提前终止short-circuit再由union做一次性合并去重从而避免在每一步都产生中间数组。与 lodash/fp union 的语义对照熟悉 lodash 的读者可以发现es-toolkit/fp的union遵循了与 lodash/fp 相同的>import { describe, expect, it } from vitest; import { union } from ./union.ts; import { pipe } from ../pipe.ts; describe(union, () { it(works in a pipe, () { expect(pipe([1, 2], union([2, 3]))).toEqual([1, 2, 3]); }); });测试直接验证了核心使用场景union在pipe内正常工作输入[1, 2]与union([2, 3])组合后输出[1, 2, 3]——第一个数组的1, 2与第二个数组补充的3与文档示例完全一致。此外仓库中还提供了unionBysrc/fp/array/unionBy.ts与unionWithsrc/fp/array/unionWith.ts两个变体unionBy允许指定一个映射函数按映射后的键值去重unionWith则接受自定义比较器。如果你的去重规则不是简单的全等比较可以按需选用这三个操作符。小结es-toolkit/fp的union把普通union的双数组调用形式改写为 contenteditable="false">【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/8 13:43:28

51单片机4×4键盘矩阵控制LED条形光柱的Proteus仿真实现

简介:这套单片机C语言程序设计资料围绕44键盘矩阵控制条形LED显示,基于8051与Proteus仿真实现,适合单片机初学者、电子相关专业学生及嵌入式爱好者练习键盘扫描与LED驱动。压缩包共17个文件,约49KB,包含C语言源文件key…

2026/11/8 10:27:51

51单片机驱动16×16点阵屏实战:字模、扫描与双缓冲

简介:本资源是一套完整的单片机课程设计实践资料,面向电子信息、自动化等专业的初学者与课程设计学生,解决1616点阵LED广告屏的硬件驱动、字符滚动算法与Proteus-Keil联合仿真调试等核心问题。压缩包共22个文件,约326KB&#xff0…

2026/11/11 23:03:46

电工证查真假查询,良心建议帮你过实操关

电工证查真假查询,良心建议帮你过实操关 实操考试心里没底怕挂科?你不是一个人。很多三门峡的在职建筑工人在考电工证的时候,最怕的就是操作环节出错,一不小心就挂科,白白浪费时间和精力。别急,这正是我接下来要给你的 良心建议…

2026/11/11 23:03:46

贵阳办假电工证在哪考?贵阳电工证造假案例全解析

贵阳办假电工证在哪考?贵阳电工证造假案例全解析 你还在为找不到工作发愁吗?有没有遇到过这样的情况:明明有工作经验,但因为没有特种作业证,被单位直接拒绝?在贵阳,像你这样的求职者并不少。而最近,贵阳地区出现了“贵阳办假电工证”的黑产业链,让人…

2026/11/11 23:03:46

低压电工证复审全过程怎么走?全国通用的流程看这里

低压电工证复审全过程怎么走?全国通用的流程看这里 不知道去哪报名怕被中介坑?低压电工证复审全过程其实比你想象的简单,关键是掌握正确的流程和渠道。特别是现在全国通用的证书,报名、考试、复审都越来越规范, 河南政务服务网…

2026/11/11 23:03:46

青州特种电工证实操考试怕挂科?2026河南最新政策这样应对

青州特种电工证实操考试怕挂科?2026河南最新政策这样应对 实操考试心里没底怕挂科?青州特种电工证报名人数年年攀升,但真正能一次性通过实操考试的人却不多。2026河南最新政策对考试流程和评分标准有了新变化,不少考生都因为不了解而吃了亏。特别…

2026/11/11 22:58:35

签合同挂电工证在哪考?特种作业证缺一不可

签合同挂电工证在哪考?特种作业证缺一不可 你还在为找不到工作发愁?特种作业证没考下来,连面试资格都没得谈。现在建筑工地、工厂、电力安装等单位,几乎 签合同挂电工证 是基本门槛,尤其像低压电工、高压电工、焊工等岗位, 签合同挂电工证…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/11 0:02:26

考低压电工证通过率考试真题与备考技巧

低压电工证通过率高不高?学历不高也能考,值不值得考? 你是不是总听说电工证能帮你找高薪工作,但又担心自己学历不够,考不上?其实,低压电工证考试门槛并没有你想象中那么高,关键是方法对不对。这篇文章就告诉你, 考低压电工证通过率到底有多高 ,…

2026/11/11 0:02:26

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名 你是不是也和我一样,刚毕业就听说低压电工证学时必须达标才能上岗?可一打听,发现报名机构五花八门,价格参差不齐, 不知道去哪报名怕被中介坑…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑