再也不用写重复代码!fp-filters:130+实用函数,JavaScript数组过滤从此优雅高效!

99 阅读3分钟

在日常开发中,你是否经常为写各种各样的数组 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(1050));

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 官方文档