本文介绍一种递归式深度搜索方法,可精准匹配嵌套对象(如 `radar_metadata`)、数组(如 `platformlist`)及基础字段(如 `vertical`)中的任意子字符串,并完整返回匹配的顶层对象。
在实际前端开发中,常需对结构复杂的嵌套数据(如含对象、数组、深层属性的配置列表)实现模糊搜索功能。原始 filterByValue 函数仅支持顶层字段的字符串匹配,无法穿透 platformList 数组或 radar_metadata 嵌套对象——导致搜索 ‘Ident’ 或 ‘Clos’ 时失效。解决关键在于:将搜索逻辑递归化,统一处理对象、数组和原始值三种类型。
以下是优化后的通用深度搜索函数:
const filterByValue = (array, string) => {
return array.filter((obj) =>
Object.keys(obj).some((key) => {
const value = obj[key];
if (value === null || value === undefined) return false;
if (typeof value === 'object' && !Array.isArray(value)) {
// 递归搜索嵌套对象(如 radar_metadata)
return filterByValue([value], string).length > 0;
} else if (Array.isArray(value)) {
// 递归搜索数组项(如 platformList)
return filterByValue(value, string).length > 0;
} else {
// 基础类型:转字符串后执行忽略大小写的包含匹配
return String(value).toLowerCase().includes(string.toLowerCase());
}
})
);
};
✅ 使用示例验证: