如何在JS数组中筛选指定字段行?实现指定字段搜索功能
如何仅针对指定字段实现JavaScript数组搜索功能?
一、修改现有代码实现需求
你只需要把原来遍历所有属性的逻辑,改成仅检查name和day两个字段即可,不用再通过Object.values(entry)遍历所有属性值。修改后的代码如下:
const data = [ { name: 'name', day: 'monday', year: '2023', user:'user13421' }, { name: 'name1', day: 'monday1', year: '20231', user:'user134211' } ] let filtered; const onSearchF = (keyword) => { const lowerKeyword = keyword.toLowerCase(); // 提前转小写,避免重复执行转换 filtered = data.filter((entry) => { // 仅判断name和day字段是否匹配关键词 return entry.name.toLowerCase().includes(lowerKeyword) || entry.day.toLowerCase().includes(lowerKeyword); }); };
二、更优方案(可扩展+性能优化)
如果后续可能需要调整搜索字段,或者想让代码更灵活易维护,可以把要搜索的字段做成配置数组,同时处理空关键词的边界情况,优化重复的字符串转换操作:
const data = [ { name: 'name', day: 'monday', year: '2023', user:'user13421' }, { name: 'name1', day: 'monday1', year: '20231', user:'user134211' } ] // 配置要搜索的字段,后续修改直接改这个数组即可 const SEARCH_TARGET_FIELDS = ['name', 'day']; let filtered; const onSearchF = (keyword) => { // 关键词为空时返回全部数据,提升用户体验 if (!keyword.trim()) { filtered = [...data]; return; } const lowerKeyword = keyword.toLowerCase(); filtered = data.filter(entry => { // 遍历配置的字段,判断是否有匹配项 return SEARCH_TARGET_FIELDS.some(field => { return entry[field].toLowerCase().includes(lowerKeyword); }); }); };
这个方案的优势:
- 扩展性强:新增/移除搜索字段只需修改
SEARCH_TARGET_FIELDS数组,无需改动过滤逻辑 - 性能更优:仅对关键词做一次小写转换,避免循环内重复执行字符串转换操作
- 边界处理完善:考虑了关键词为空的情况,返回全部数据
内容的提问来源于stack exchange,提问作者wch
相关产品推荐
相关产品推荐

