2作者: oaxoa8 天前原帖
你好,HN, 我想分享一个我正在开发的库,名为: **fp-filters** - 一个精心挑选的包含130多个常用过滤函数的集合,这些函数采用函数式编程风格编写(并且可以使用)。 ### 为什么我构建这个库: 我注意到在多个代码库中,开发者倾向于反复编写相同或相似的过滤函数。很多时候,这些函数都是内联的,影响了可读性。 我意识到它们中的大多数实际上执行的操作是相似的,因此可以将它们隔离、整理并单独维护。 **fp-filters** 提供了130多个可组合的、无点的过滤函数,使数据转换管道更加可读和易于维护。 所有函数都是谓词,可以作为谓词使用,但在用作过滤器时表现尤为出色。 ### 主要特点: 1. 纯函数式方法,无副作用 2. 可组合的谓词(通过fp-booleans实现的与、或、非组合子) 3. 常见过滤模式作为可重用函数 4. 具有TypeScript定义的类型安全 5. 以esm和cjs格式导出 6. 零依赖,体积小 7. 单独导出,甚至不需要树摇 8. 100%测试覆盖率 ### 示例用法: ```javascript const input = [[1, 2, 3], [2, 4], [0, 4, 8, 16]]; // JS input.filter((array) => array.every((element) => element % 2 === 0)); // fp-filters input.filter(everyElement(isEven)); ``` ```javascript // JS dates.filter((date) => { const day = date.getDay(); return day === 0 || day === 6; }); // fp-filters dates.filter(isWeekend); ``` ```javascript // JS array.filter((arg) => arg.length > 0); // fp-filters array.filter(isNotEmpty); ``` ### 与众不同之处: 与lodash/fp或ramda不同,**fp-filters** 专注于数组过滤模式,强调在复杂数据转换中的可读性。它旨在对已经熟悉JavaScript数组方法的开发者直观易用,同时提供函数组合的优势。 该项目采用MIT许可证,欢迎贡献。我期待听到HN社区的反馈。 ### 链接: npm: [https://www.npmjs.com/package/fp-filters](https://www.npmjs.com/package/fp-filters) GitHub: [https://github.com/Oaxoa/fp-filters](https://github.com/Oaxoa/fp-filters) 文档: [https://oaxoa.github.io/fp-filters](https://oaxoa.github.io/fp-filters) 感谢你们的关注!