You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript一维对象数组中实现SQL LIKE式不区分大小写过滤?

JavaScript实现类似SQL LIKE的不区分大小写模糊匹配

原始数据

var data = [
{
  "empId": 63758,
  "empCode": "000003A",
  "empName": "Robert",
},
{
  "empId": 63759,
  "empCode": "000003B",
  "empName": "Paul John",
},
{
  "empId": 63760,
  "empCode": "000003C",
  "empName": "Chris John",
},
];

需求

实现类似SQL查询中LIKE '%john%'的效果,不区分大小写过滤出empName包含"john"的条目,最终得到以下结果:

var data = [
{
  "empId": 63759,
  "empCode": "000003B",
  "empName": "Paul John",
},
{
  "empId": 63760,
  "empCode": "000003C",
  "empName": "Chris John",
},
];

原代码问题

你尝试的代码仅支持完整文本匹配,无法实现模糊匹配:

var filter = {
  "empName": "Chris John"
}
data = data.filter(function(item){
for(var key in filter){
    if(item[key] == undefined || item[key] != filter[key])
    return false
}
return true
});

解决方案

方案1:单字段模糊匹配(简单直观)

通过toLowerCase()统一大小写,再用includes()判断子串是否存在,实现不区分大小写的模糊匹配:

var data = [
// 原始数据同上
];

// 目标匹配关键词
const matchKeyword = "john";
// 过滤逻辑
const filteredData = data.filter(item => {
  // 可选链操作符?.避免empName为undefined时报错
  return item.empName?.toLowerCase().includes(matchKeyword.toLowerCase());
});

console.log(filteredData);

方案2:兼容多字段的模糊匹配(复用原filter对象格式)

如果需要支持多个字段的模糊匹配,可修改遍历逻辑,对每个过滤字段执行包含判断:

var data = [
// 原始数据同上
];

// 定义过滤规则,键为字段名,值为要匹配的关键词
const filter = {
  "empName": "john"
};

const filteredData = data.filter(item => {
  for (const key in filter) {
    const target = filter[key].toLowerCase();
    const itemValue = item[key]?.toLowerCase();
    // 字段不存在或不包含目标关键词则排除
    if (!itemValue || !itemValue.includes(target)) {
      return false;
    }
  }
  // 所有过滤条件满足则保留
  return true;
});

console.log(filteredData);

核心逻辑说明

  • toLowerCase():将目标文本和匹配关键词统一转为小写,消除大小写差异,实现不区分大小写匹配。
  • includes():判断字符串是否包含指定子串,对应SQL中%xxx%的模糊匹配逻辑。
  • ?.:可选链操作符,防止字段不存在时调用toLowerCase()抛出错误。

内容的提问来源于stack exchange,提问作者smlos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:06:22