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

JavaScript嵌套对象数组中不区分大小写Title子串查找优化

解决方案

可以用递归+短路判断的方式实现,不用序列化或拼接字符串,直接遍历对象结构,找到匹配项就立刻终止检查,效率更高:

function hasMatchingTitle(obj, searchStr) {
  const lowerSearch = searchStr.toLowerCase();
  
  // 先检查当前对象的Title(如果存在)
  if (obj.Title && typeof obj.Title === 'string') {
    if (obj.Title.toLowerCase().includes(lowerSearch)) {
      return true;
    }
  }

  // 遍历对象的所有属性,跳过Description
  for (const key in obj) {
    if (key === 'Description') continue;
    
    const value = obj[key];
    // 如果是数组,遍历每个元素检查
    if (Array.isArray(value)) {
      for (const item of value) {
        if (typeof item === 'object' && item !== null) {
          if (hasMatchingTitle(item, lowerSearch)) {
            return true; // 找到匹配立即返回,终止所有遍历
          }
        }
      }
    } 
    // 如果是对象(非数组),递归检查
    else if (typeof value === 'object' && value !== null) {
      if (hasMatchingTitle(value, lowerSearch)) {
        return true;
      }
    }
  }

  // 遍历完都没找到
  return false;
}

使用示例

假设你的数据结构是这样的:

const mainFolder = {
  Title: "Project Documents",
  Description: "Some docs",
  Contents: [
    { Title: "Information Manual", Description: "..." },
    { Title: "Report", Description: "..." }
  ]
};

// 检查是否包含"information"(不区分大小写)
const result = hasMatchingTitle(mainFolder, 'information');
console.log(result); // 输出 true

代码说明

  • 先把搜索字符串转成小写,避免多次转换,提升效率
  • 优先检查当前对象的Title,匹配就直接返回
  • 遍历属性时跳过Description字段,完全不处理它
  • 遇到数组就逐个元素递归检查,只要有一个匹配就立即终止所有流程
  • 遇到嵌套对象直接递归,支持多层嵌套的结构

这种方法直接操作对象的属性和结构,没有多余的序列化/拼接操作,性能更好,逻辑清晰,完全符合你要的"找到后立即停止"的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:42:35