在日常开发中,你是否经常为写各种各样的数组 filter 函数而头疼?
比如判断数组元素是否为偶数、字符串是否为空、对象属性是否存在等等。每次都要写类似的匿名函数,代码冗余不说,还容易出错。
其实,有个开源宝藏库能帮你彻底解决这些问题——fp-filters。
本文带你快速了解 fp-filters 的核心功能、使用方法和最佳实践,让你的 JavaScript 代码更简洁、更优雅、更易维护!
什么是 fp-filters?
fp-filters 是一个收集了 130+ 常用过滤函数的开源库,全部采用函数式编程风格编写。
它的目标很简单:让你告别重复造轮子,专注业务逻辑,提高代码可读性和开发效率。
无论你是需要判断数字、字符串、数组、对象,还是涉及到时间、类型检查等,fp-filters 都能帮你一键搞定。
为什么选择 fp-filters?
- • 极简用法:大部分函数只有一行代码,调用简单明了。
- • 纯函数设计:所有函数都是纯函数,保证无副作用,结果可预测。
- • 类型安全:全部 TypeScript 类型支持,开发更安心。
- • 按需引入:用多少引多少,打包体积极小。
- • 覆盖全面:130+ 个过滤函数,涵盖常见场景。
- • 100% 单元测试:每个函数都经过严格测试,稳定可靠。
- • 易于扩展:支持自定义组合和取反,灵活应对复杂需求。
使用场景举例
下面用通俗的例子,展示 fp-filters 如何让你的代码瞬间优雅起来。
1. 数组元素全为偶数
传统写法:
input.filter((array) => array.every((element) => element % 2 === 0));
fp-filters 写法:
input.filter(everyElement(isEven));
2. 筛选为 true 的布尔值
传统写法:
array.filter((arg) => arg === true);
fp-filters 写法:
array.filter(isTrue);
3. 筛选周末的日期
传统写法:
dates.filter((date) => {
const day = date.getDay();
return day === 0 || day === 6;
});
fp-filters 写法:
dates.filter(isWeekend);
4. 非空数组/字符串
传统写法:
array.filter((arg) => arg.length > 0);
fp-filters 写法:
array.filter(isNotEmpty);
5. 筛选对象属性存在
传统写法:
products.filter((obj) => obj.id !== undefined && obj.plu !== undefined);
fp-filters 写法:
products.filter(hasProps(['id', 'plu']));
6. 筛选数字区间
传统写法:
array.filter((arg) => arg >= 10 && arg <= 50);
fp-filters 写法:
array.filter(isBetween(10, 50));
7. 判断字符串是否回文
传统写法:
array.filter((arg) => {
for (let i = 0; i < arg.length / 2; i++) {
if (arg[i] !== arg[arg.length - i - 1]) {
return false;
}
}
return true;
});
fp-filters 写法:
array.filter(isPalindrome);
高阶用法:组合与取反
fp-filters 不仅提供了丰富的基础过滤函数,还支持取反和组合。比如:
-
• 取反:
array.filter(isNot(5)); -
• 组合:
const canBeDiscounted = (minPrice) => and(isGreaterOrEqualTo(minPrice), not(isRound)); array.filter(canBeDiscounted(10));
你可以像搭积木一样,随心组合各种过滤条件,满足更复杂的业务需求。
安装和快速上手
fp-filters 支持 Node.js 环境,安装非常简单:
npm install --save fp-filters
# 或者
yarn add fp-filters
引入使用也很方便:
import { isEven, isNotEmpty } from 'fp-filters';
const result = array.filter(isEven);
设计亮点一览
- • 纯粹函数式:所有函数都遵循函数式编程原则,易于测试和复用。
- • 极致轻量:没有多余依赖,按需加载,打包无负担。
- • 语义分组:函数按照用途分组,查找直观。
- • 100% 测试覆盖:每个分支、每行代码都经过测试,质量有保障。
- • TypeScript 全面支持:类型提示友好,减少低级错误。
总结
fp-filters 就像你代码中的“过滤神器”,让你从此告别冗长的 filter 代码。无论是新手还是资深开发者,都能从中受益。下次再遇到需要写 filter 的场景,记得试试 fp-filters,让你的代码更优雅、更高效!
关注梦兽编程微信公众号,获取更多前端高效开发技巧和实用工具推荐!
项目地址:fp-filters on GitHub
文档地址:fp-filters 官方文档