JavaScript中高阶函数可返回定制化过滤函数,核心是外层函数接收筛选条件并返回基于闭包的filter函数,支持按属性筛选、多种比较运算符及多条件组合,确保复用性与不可变性。

JavaScript中用高阶函数返回定制化过滤函数,核心是让外层函数接收筛选条件,返回一个可复用的filter函数。
理解高阶函数的基本结构
高阶函数指接受函数作为参数或返回函数的函数。要返回过滤函数,只需让外层函数返回一个接收数组、内部调用Array.prototype.filter并使用闭包捕获条件的函数。
- 外层函数负责“配置”筛选逻辑(如字段名、阈值、匹配方式)
- 返回的内层函数保持对这些配置的引用(闭包),可多次用于不同数组
- 避免重复写相同条件判断,提升可读性和复用性
按属性值筛选:返回基于字段和值的过滤器
比如想按对象某个属性是否等于某值来过滤:
const createFilterByProp = (key, value) => arr => arr.filter(item => item[key] === value);
const filterByStatus = createFilterByProp('status', 'active');
const users = [{name: 'Alice', status: 'active'}, {name: 'Bob', status: 'inactive'}];
console.log(filterByStatus(users)); // [{name: 'Alice', status: 'active'}]
支持比较运算符的灵活过滤器
扩展为支持==、>、includes等操作:
立即学习“Java免费学习笔记(深入)”;
const createFilter = (key, operator, target) => {
return arr => arr.filter(item => {
const val = item[key];
switch (operator) {
case 'eq': return val == target;
case 'gt': return val > target;
case 'includes': return typeof val === 'string' && val.includes(target);
default: return false;
}
});
};
const filterByName = createFilter('name', 'includes', 'li');
const filterAgeOver = createFilter('age', 'gt', 25);
组合多个条件:返回支持链式或复合逻辑的过滤器
可以返回一个接收多个规则的函数,或用函数组合方式拼接多个过滤器:
- 单个函数支持多条件:传入规则数组,每个规则含
key、op、val,全部满足才保留 - 函数组合:用
compose或简单顺序调用多个返回的过滤器,实现“先筛状态再筛年龄” - 注意返回新数组,不修改原数组,符合函数式编程习惯
不复杂但容易忽略的是闭包变量的生命周期——确保外层函数参数在返回的过滤器中始终可用,且每次调用createFilter都生成独立作用域,互不影响。


















