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
相关产品推荐
相关产品推荐

