JavaScript之ES6的filter()方法动态选择筛选条件

博主今天在实战中遇到了列表根据多个输入选择框内容筛选显示的需求,如图所示:
列表根据输入选择框内容筛选显示
由于博主最近在学习ES6的相关知识,所以第一时间想到了filter()方法。因为filter()方法不会改变原始数组,而是创建一个新的数组,所以只需请求一次数据,在前端判断哪些数组项需要显示即可。
但是由于这里有三个输入选择框,可以有内容也可以无内容,也可以只填充其中的某1个或某2个框,所以filter()方法的筛选条件应该是动态的,话不多说,上代码:

//点击查询触发方法
filterAutomobile() {
  //获取三个选择输入框的内容字符串
  let filtersName = this.filters.name.trim();
  let filtersBrand = this.filters.brand.trim();
  let filtersCategory = this.filters.category.trim();
  //筛选原始数组并赋值给filtersAutomobile数组
  let filtersAutomobile = this.automobileInfs.filter(item => {
    //定义筛选条件,默认为true,这样就可以让不符合动态选择条件时不影响筛选条件
    var isFiltersName = true;
    var isFiltersBrand = true;
    var isFiltersCategory = true;
    //符合动态选择条件就给筛选条件赋值
    if (filtersName.length != 0) {
      isFiltersName = item.name.indexOf(filtersName) != -1;
    }
    if (filtersBrand.length != 0) {
      isFiltersBrand = item.brand == filtersBrand;
    }
    if (filtersCategory.length != 0) {
      isFiltersCategory = item.category == filtersCategory;
    }
    //返回筛选条件
    return isFiltersName && isFiltersBrand && isFiltersCategory;
  });
  //把筛选后的数组赋值给列表显示数组
  this.filterAutomobileInfs = filtersAutomobile;
}

这样就实现了filter()方法的动态选择筛选条件,希望这篇文章可以帮到遇到此需求的小伙伴,大家一起加油吧!!!

<think>首先,用户的问题是:“es6前端筛选 动态嵌套filter”,这看起来是中文,意思是“ES6前端筛选动态嵌套filter”。用户可能想了解如何使用ES6(ECMAScript 2015)在纯前端(没有后端)实现一个动态嵌套的筛选器(filter)。这可能涉及到数组操作、条件筛选等功能。 关键点是: - ES6:使用现代JavaScript特性。 - 纯前端:所有处理在浏览器端完成。 - 筛选过滤数据,比如数组。 - 动态嵌套:可能意味着筛选条件动态变化的,并且可以有多个层次的筛选条件(嵌套)。 用户没有提供具体的代码或场景,所以我需要基于理解给出一个通用的解释和示例。 我的回答需要: 1. 使用中文回答问题。 2. 在回答末尾提出3-5个相关问题。 3. 第一行必须完整输出 "§§相关问题§§",然后列出问题。 4. 禁止换行分散:相关问题必须连续输出,不能有额外的换行。 回顾示例格式: - 先回答问题(这里是快速排序的Python代码)。 - 然后以 "§§相关问题§§" 开头,紧跟相关问题列表。 所以,我的回答结构: - 第一部分:解释并提供一个ES6前端动态嵌套筛选的示例(可能是JavaScript代码)。 - 第二部分:以 "§§相关问题§§" 开头,提出3-5个相关问题。 内容想法: - 解释什么是动态嵌套筛选:例如,有一个数据集(如数组对象),用户可以添加多个筛选条件(如基于属性值),这些条件可以嵌套(如组合AND/OR逻辑)。 - 使用ES6特性:如箭头函数、Array.prototype.filter、模板字符串、可选链操作符等。 - 提供一个简单示例:假设一个用户列表,可以根据年龄、城市等动态筛选。 示例代码: - 定义一个数据数组:`const users = [{name: 'Alice', age: 25, city: 'Beijing'}, {...}]` - 实现一个筛选函数:使用filter方法结合动态条件。 - 展示如何动态添加嵌套条件。 例如: ```javascript // 数据 const users = [ { id: 1, name: 'Alice', age: 25, city: 'Beijing', hobbies: ['reading', 'traveling'] }, { id: 2, name: 'Bob', age: 30, city: 'Shanghai', hobbies: ['sports', 'music'] }, // 更多... ]; // 动态筛选函数 function nestedFilter(data, filters) { return data.filter(item => { return filters.every(filterFn => filterFn(item)); }); } // 示例使用:动态创建筛选器 const ageFilter = item => item.age > 20; const cityFilter = item => item.city === 'Beijing'; const hobbyFilter = item => item.hobbies.includes('reading'); // 组合筛选 const f1 = nestedFilter(users, [ageFilter, cityFilter]); const f2 = nestedFilter(users, [ageFilter, hobbyFilter]); // 嵌套体现在多个条件 // 动态添加:用户可以在运行时添加或移除筛选器 ``` 确保示例是纯前端ES6。 现在,相关问题: - 需要3-5个,基于用户的问题和我的回答。 - 主题:ES6前端筛选动态条件、嵌套逻辑。 - 例如: 1. 如何实现更复杂的嵌套逻辑,比如OR条件? 2. ES6中有哪些其他数组方法可以用于高效筛选? 3. 如何在前端实现实时搜索或筛选? 4. 如何在React或Vue等框架中集成动态筛选? 5. 优化大型数据集的筛选性能的技巧有哪些? 确保问题合理且相关。 完整回答: - 先用中文解释。 - 提供代码示例。 - 然后 "§§相关问题§§" 后跟问题列表。 最终输出: - 回答部分。 - "§§相关问题§§"(必须第一行完整输出)。 - 然后1. ... 2. ... 等。 </think>ES6前端实现动态嵌套筛选的关键是利用JavaScript的数组方法(如`filter`、`every`、`some`)和高阶函数,支持运行时动态添加和组合多个筛选条件(例如AND/OR逻辑)。以下是一个完整示例: ```javascript // 示例数据:用户数组 const users = [ { id: 1, name: 'Alice', age: 25, city: 'Beijing', hobbies: ['reading', 'traveling'] }, { id: 2, name: 'Bob', age: 30, city: 'Shanghai', hobbies: ['sports', 'music'] }, { id: 3, name: 'Charlie', age: 28, city: 'Beijing', hobbies: ['traveling', 'cooking'] } ]; // 动态嵌套筛选函数(支持AND逻辑) function nestedFilter(data, filters) { return data.filter(item => filters.every(filterFunc => filterFunc(item))); } // 示例:创建动态筛选器(可运行时添加) const ageFilter = item => item.age > 25; // 年龄>25 const cityFilter = item => item.city === 'Beijing'; // 城市是北京 const hobbyFilter = hobby => item => item.hobbies.includes(hobby); // 动态爱好筛选 // 使用示例:组合多个条件 const activeFilters = [ageFilter, cityFilter]; // AND逻辑:年龄>25 AND 城市=北京 const filteredUsers = nestedFilter(users, activeFilters); console.log(filteredUsers); // 输出:符合条件的用户数组 // 动态添加嵌套条件(如hobbyFilter) activeFilters.push(hobbyFilter('traveling')); // 新增筛选:爱好包含traveling const newFiltered = nestedFilter(users, activeFilters); // 更新结果 ``` ### 关键点: - **ES6特性**:使用箭头函数、高阶函数和数组方法实现纯前端逻辑。 - **动态性**:通过数组存储筛选函数(如`activeFilters`),支持运行时增删条件。 - **嵌套逻辑**:`every`实现AND嵌套,`some`可实现OR逻辑(需修改函数)。 - **性能**:对于大型数据,使用`Map`或缓存优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值