
在前端开发中,我们经常需要对包含大量数据的对象数组进行筛选和搜索。常见的场景包括:
这些需求往往需要一个既灵活又高效的解决方案。
为了同时满足上述多种过滤条件,我们选择使用J*aScript的正则表达式(RegExp)作为核心工具。正则表达式的强大之处在于其能够定义复杂的匹配模式,并提供高效的字符串搜索能力。
我们的策略是:
以下是实现多条件对象数组过滤的J*aScript函数及其应用示例:
Blackink AI纹身生成
创建类似纹身的设计,生成独特纹身
80
查看详情
立即学习“J*a免费学习笔记(深入)”;
const testData = [
{ id: 1, name: 'Taliparamba Co Op Hospital' },
{ id: 1, name: 'Athikkal Saw Mill,Kallai' },
{ id: 1, name: 'Marhaba Ice Plant Atholi' },
];
/**
* 根据搜索词过滤对象数组
* @param {Array<Object>} arr - 待过滤的对象数组
* @param {string} searchTerm - 用户输入的搜索词
* @returns {Array<Object>} 过滤后的数组
*/
function filterArrayOfObjects(arr, searchTerm) {
if (!searchTerm) {
return arr; // 如果搜索词为空,返回原数组
}
// 1. 将搜索词按空格分割成单词,并对每个单词进行正则转义
// 转义是为了防止搜索词中包含特殊正则字符(如 . * + ? 等)导致匹配错误
const escapedSearchTerms = searchTerm
.split(' ')
.map(word => word.replace(/[.*+?^${}()|[]\]/g, '\$&'));
// 2. 构建正则表达式模式
// 使用 '.*?' 非贪婪匹配任意字符(0次或多次)连接各个单词,
// 并用 '\b' 单词边界确保匹配的是独立的单词或单词的一部分,而不是单词内部的字符。
const pattern = escapedSearchTerms.join('.*?\b');
// 3. 创建正则表达式对象
// '\b' 在模式开头,确保整个搜索从一个单词边界开始匹配。
// 'i' 标志表示忽略大小写。
const regex = new RegExp('\b' + pattern, 'i');
// 4. 使用 Array.prototype.filter() 方法进行过滤
return arr.filter(item => regex.test(item.name));
}
// 示例用法:
console.log("--- 搜索 'tali' (开头匹配) ---");
console.log(filterArrayOfObjects(testData, 'tali'));
/*
预期输出:
[ { id: 1, name: 'Taliparamba Co Op Hospital' } ]
*/
console.log("
--- 搜索 'tali Co OP' (多词顺序匹配) ---");
console.log(filterArrayOfObjects(testData, 'tali Co OP'));
/*
预期输出:
[ { id: 1, name: 'Taliparamba Co Op Hospital' } ]
*/
console.log("
--- 搜索 'ath' (内容包含) ---");
console.log(filterArrayOfObjects(testData, 'ath'));
/*
预期输出:
[
{ id: 1, name: 'Athikkal Saw Mill,Kallai' },
{ id: 1, name: 'Marhaba Ice Plant Atholi' }
]
*/
console.log("
--- 搜索 'mill' (内容包含) ---");
console.log(filterArrayOfObjects(testData, 'mill'));
/*
预期输出:
[ { id: 1, name: 'Athikkal Saw Mill,Kallai' } ]
*/
console.log("
--- 搜索 'hospital' (内容包含,大小写不敏感) ---");
console.log(filterArrayOfObjects(testData, 'hospital'));
/*
预期输出:
[ { id: 1, name: 'Taliparamba Co Op Hospital' } ]
*/
console.log("
--- 搜索 '' (空搜索词) ---");
console.log(filterArrayOfObjects(testData, ''));
/*
预期输出:
[
{ id: 1, name: 'Taliparamba Co Op Hospital' },
{ id: 1, name: 'Athikkal Saw Mill,Kallai' },
{ id: 1, name: 'Marhaba Ice Plant Atholi' }
]
*/理解正则表达式的构建是掌握此解决方案的关键:
要,因为它防止了在单词内部的任意位置开始匹配。通过巧妙地运用J*aScript的正则表达式,我们成功实现了一个功能强大且灵活的对象数组过滤函数,能够优雅地处理“开头匹配”、“多词顺序匹配”以及“内容包含”等多种搜索场景。理解正则表达式的构建逻辑是掌握此方案的关键。在实际应用中,结合性能优化和用户体验的考量,可以构建出高效且用户友好的数据筛选功能。
以上就是J*aScript数组对象高级过滤:实现多条件(开头匹配与内容包含)搜索的详细内容,更多请关注其它相关文章!
# 能找到
# 东莞网站建设网页推广
# 热门推广音乐视频素材网站
# 抚顺正规的seo优化站
# 象山seo的优化需求
# 姑苏网站优化有哪些
# 湖南seo营销电话
# 太仓外贸营销推广公司电话
# 做电商网站如何引流推广
# 西城网站建设网络推广
# 推特关键词排名能刷吗
# 为空
# 如何用
# 搜索结果
# javascript
# 这是一个
# 多个
# 的是
# 多条
# 关键词
# ai
# 前端开发
# 工具
# 正则表达式
# 前端
# java
# word
相关文章:
c++ 获取系统当前时间 c++时间戳获取方法
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
自定义 WooCommerce 购物车:始终显示全部交叉销售商品
漫蛙网页登录入口 漫蛙漫画官方授权网址
AO3中文官网链接_AO3网页版稳定镜像站
PostgreSQL海量数据高效导入策略:Python与Django实践指南
Lar*el 中按“Has One Of Many”关联模型排序的最佳实践
将PCM16音频数据转换为W*并编码为Base64教程
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
word中如何让数字纵向排列_Word数字纵向排列方法
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
CSS Box Model与弹性按钮:维持布局稳定的动画实践
2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC
Kafka Streams中基于消息头条件过滤消息的实现指南
Lar*el Eloquent:高效统计带条件关联模型的数量
Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程
PHP 枚举:根据字符串获取枚举案例的策略与实现
J*aScript中针对特定容器内图片动画的实现教程
Angular响应式表单:实现提交后表单及按钮的禁用与只读化
c++ dfs和bfs代码 c++深度广度优先搜索算法
《马克思佩恩3》早期版本曝光 UI设计曾多次调整!
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
WooCommerce 购物车显示所有交叉销售商品教程
VS Code远程开发时如何处理文件权限问题
PHP:从文本中提取带逗号的数字价格教程
J*a ArrayList索引越界异常:动态构建列数据的高效策略
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
Promise错误处理:在catch后终止链式then执行的策略
Lar*el Form Request中唯一性验证在更新操作中的正确实现
苹果手机如何防止被恶意App追踪
谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航
自定义Bag-of-Words实现:处理带负号的词汇权重
AO3官方镜像站点汇总 AO3同人作品网页版直达链接
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
C++如何实现单例模式_C++设计模式之线程安全的单例写法
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
PHP中SSG-WSG API的AES加密实践:正确使用初始化向量
Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】
小米Civi 4录制视频过暗_小米Civi 4亮度优化
Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】
将HTML Canvas内容转换为可上传的图像文件(File对象)
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问
C++如何比较两个字符串_C++ string compare函数与操作符对比
PDF文件体积过大处理_PDF压缩技巧详解
*请认真填写需求信息,我们会在24小时内与您取得联系。