开发小技巧:javascript的filter函数用法,结合查询条件对数据的动态过滤

1.javascript的filter函数用法

该方法用于过滤数组成员,满足条件的成员组成一个新数组返回。它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。

 上面代码将大于3的数组成员,作为一个新数组返回。

其他详细用法可参见:https://download.csdn.net/blog/column/10753502/119318474

 

2.结合查询条件对数据的动态过滤

现在有一个查询区域如下图,用户可在查询区域组合0~任意个查询条件,然后点击查询按钮,页面显示按照查询条件查出的数据。

 实际上有两种解决思路:

一种是前端将用户操作的查询条件值作为请求参数给到后端,由后端按照查询条件返回最终数据,前端直接显示最终数据;

一种是前端直接调用全数据查询接口获取全量数据,然后前端根据用户操作的查询条件,对全量数据进行前端显示的过滤。

我们本次使用第二种方式,核心代码如下:

 1   // 查询任务 (主界面的查询按钮)
 2     searchBtn.addEventListener('click', function () {
 3         const testSite = document.getElementById('searchTestSite').value;   //获取查询选定的测试场地
 4         const system = document.getElementById('searchSystem').value;       //获取查询选定的无人系统
 5         const taskDesc = document.getElementById('searchTaskDesc').value.trim().toLowerCase(); //获取查询输入的任务描述
 6         const status = document.getElementById('searchStatus').value;       //获取查询选定的任务状态
 7         const date = document.getElementById('searchDate').value;       //获取选定的下发日期  (日期选择器用的是原生的input type="date")
 8 
 9         // 过滤任务  (对后端获取的全数据进行过滤[最好是在重新全部调用一下,然后过滤]) tasks是后端返回的数据数组
10         const filteredTasks = tasks.filter(task => {
11             //对查询条件区挨个判断,只要有一项不符就剔除掉
12             if (testSite && task.testSite !== testSite) return false;
13             if (system && task.system !== system) return false;
14             if (taskDesc && !task.title.toLowerCase().includes(taskDesc)) return false;  //模糊查询,看是否包含  (实际是前端控制)
15             if (status && task.status !== status) return false;
16             if (date) {
17                 const taskDate = task.dispatchTime.split(' ')[0];//后台的时间格式分割需要注意,取前面yyyy-MM-dd
18                 if (taskDate !== date) return false;
19             }
20             return true;
21         });
22 
23         // 渲染过滤后的任务
24         renderCards(filteredTasks);
25     });
posted @ 2025-05-23 14:34  上清风  阅读(210)  评论(0)    收藏  举报