javascript数组过滤主要用filter()实现声明式搜索,支持模糊匹配(includes)、多字段联合搜索(some+动态键)、开头匹配(startswith)、正则高级匹配及组合条件联动。

JavaScript 数组过滤方法在搜索逻辑中主要靠 filter() 实现,它能快速、声明式地从数据中提取匹配项,不修改原数组,适合响应式搜索、实时筛选等场景。
基础关键词包含搜索
最常见的是对字符串字段做模糊匹配。用 includes() 判断是否含关键词,忽略大小写时可统一转小写:
items.filter(item => item.name.toLowerCase().includes(keyword.toLowerCase()))- 适用于产品名、用户名、标题等简单搜索
- 注意:空关键词应提前拦截,避免返回全部数据
多字段联合搜索
用户可能在多个列中输入关键词(如“姓名或城市”),这时需检查多个属性:
items.filter(item => item.name.includes(kw) || item.city.includes(kw) || item.email.includes(kw))- 也可封装为动态字段列表:
['name', 'city', 'email'].some(key => item[key]?.includes(kw)) - 推荐加可选的
?.防止访问 undefined 属性报错
开头匹配与正则高级匹配
当需要“以某词开头”或支持多词顺序匹配时,startsWith() 或正则更精准:
- 开头匹配:
item.name.toLowerCase().startsWith(keyword.toLowerCase()) - 多词顺序匹配(如搜索 “tali co op”):构建正则
new RegExp(keyword.split(/\s+/).join('.*'), 'i'),再用regex.test(item.name) - 正则可统一处理大小写、空格、中间任意字符,灵活性高
组合条件与状态联动
真实搜索常结合其他筛选器(如分类、状态、价格区间),filter() 可自然叠加逻辑:
list.filter(item => matchesSearch(item) && item.category === selectedCat && item.price- 把各条件拆成独立函数(如
matchesSearch()、inStock()),提升可读性和复用性 - 条件为 false 时自动跳过,无需额外 if 分支
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











