
在现代web应用中,数据筛选是一个核心功能。当我们需要从一个包含多个对象的数组中,根据某个字符串属性(例如name)进行搜索时,往往不仅仅需要简单的精确匹配或判断是否包含,还需要更灵活的模糊匹配能力。例如,用户可能输入一个词希望匹配开头,输入多个词希望匹配这些词的组合,或者输入一个词希望匹配任意位置包含该词的项。
假设我们有一个对象数组,每个对象都有一个id和name属性:
const test = [
{ id: 1, name: 'Taliparamba Co Op Hospital' },
{ id: 1, name: 'Athikkal Saw Mill,Kallai' },
{ id: 1, name: 'Marhaba Ice Plant Atholi' },
];我们需要实现以下两种核心筛选逻辑:
开头匹配或多词开头匹配:
包含匹配:
立即学习“Java免费学习笔记(深入)”;
为了高效且灵活地处理上述复杂的模糊匹配需求,正则表达式是理想的选择。通过动态构建正则表达式,我们可以实现强大的搜索功能。
首先,定义我们的数据数组:
const test = [
{ id: 1, name: 'Taliparamba Co Op Hospital' },
{ id: 1, name: 'Athikkal Saw Mill,Kallai' },
{ id: 1, name: 'Marhaba Ice Plant Atholi' },
];接下来,我们创建一个search函数,它接收一个数组和搜索字符串作为参数:
function search(arr, str) {
// 1. 处理空搜索字符串
if (!str || str.trim() === '') {
return arr; // 如果搜索字符串为空,返回原始数组
}
// 2. 构建正则表达式
// 将搜索字符串按空格分割成词语,并用 '.*?\b' 连接
// '.*?' 表示非贪婪匹配任意字符(0次或多次)
// '\b' 表示词边界,确保匹配的是完整的词或词的一部分
// 整体表达式以 '\b' 开头,确保第一个词从一个词的边界开始匹配
const pattern = '\b' + str.split(' ').join('.*?\b');
// 创建正则表达式对象,'i' 标志表示忽略大小写
const regexp = new RegExp(pattern, 'i');
// 3. 使用 filter 方法和 test 方法进行筛选
// filter 遍历数组的每个元素
// regexp.test(item.name) 检查元素的 name 属性是否匹配正则表达式
return arr.filter((item) => regexp.test(item.name));
}现在,我们可以使用search函数来测试我们的筛选逻辑:
// 原始数据
const test = [
{ id: 1, name: 'Taliparamba Co Op Hospital' },
{ id: 1, name: 'Athikkal Saw Mill,Kallai' },
{ id: 1, name: 'Marhaba Ice Plant Atholi' },
];
// 示例一:开头匹配
console.log("搜索 'tali':", search(test, 'tali'));
// 预期输出: [{ id: 1, name: 'Taliparamba Co Op Hospital' }]
// 示例二:多词组合匹配(开头+包含)
console.log("搜索 'tali Co OP':", search(test, 'tali Co OP'));
// 预期输出: [{ id: 1, name: 'Taliparamba Co Op Hospital' }]
// 示例三:包含匹配
console.log("搜索 'ath':", search(test, 'ath'));
// 预期输出: [
// { id: 1, name: 'Athikkal Saw Mill,Kallai' },
// { id: 1, name: 'Marhaba Ice Plant Atholi' }
// ]
// 示例四:空字符串搜索
console.log("搜索 '':", search(test, ''));
// 预期输出: 原始数组全部返回
// 示例五:不匹配
console.log("搜索 'xyz':", search(test, 'xyz'));
// 预期输出: []通过上述方法,我们能够灵活地处理JavaScript中对象数组的复杂模糊搜索需求,实现既能匹配开头又能匹配包含,甚至支持多词组合的高级筛选功能。这种基于正则表达式的方案强大且可扩展,是处理类似场景的有效工具。
以上就是JavaScript数组对象高级筛选:实现多条件模糊匹配(包含与开头匹配)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号