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

求助开发支持多参数查询的多级JSON结构搜索函数

多级JSON深度搜索与多参数查询函数改造

需求概述

  • 支持多级嵌套JSON结构的深度搜索
  • 支持多参数组合查询(如同时匹配SKU和punctuation字段)
  • 匹配到的多个结果自动存入数组返回

示例嵌套JSON结构

[
    [
        {
            "name": "brush",
            "punctuation": 20,
            "componets": [
                {
                    "SKU": "24AC",
                    "name": "toothbrush",
                    "type": "cleaning item"
                },
                {
                    "SKU": "23AC",
                    "name": "hair brush",
                    "type": "cleaning item"
                }
            ]
        },
        {
            "name": "glue",
            "punctuation": 15,
            "componets": [
                {
                    "SKU": "24Ak",
                    "name": "paper glue",
                    "type": "hardware store"
                },
                {
                    "SKU": "23Ak",
                    "name": "floor glue",
                    "type": "hardware store"
                }
            ]
        }
    ]
]

原函数的局限

原函数仅能遍历JSON结构的第一层,无法处理嵌套的对象或数组:

search(dataSearch:any, objectData:any){
    let result = objectData.filter((data:any) => {
      return Object.keys(data).some((key:any) =>{
        return JSON.stringify(data[key]).trim().includes(dataSearch);
      });
    });
}

改造后的深度搜索函数

以下函数通过递归遍历实现多级JSON搜索,同时支持单参数和多参数组合查询:

function deepSearch(query: string | Record<string, any>, data: any): any[] {
  const results: any[] = [];

  // 递归遍历所有嵌套元素
  const traverse = (item: any) => {
    if (!item) return;

    // 判断当前元素是否匹配查询条件
    let isMatch = false;
    if (typeof query === 'string') {
      // 单字符串查询:检查当前元素的所有字段值是否包含目标字符串
      isMatch = Object.values(item).some(val => 
        typeof val === 'string' ? val.includes(query) : JSON.stringify(val).includes(query)
      );
    } else {
      // 多参数查询:检查当前元素是否匹配所有指定的键值对
      isMatch = Object.entries(query).every(([key, value]) => item[key] === value);
    }

    // 匹配成功则加入结果数组
    if (isMatch) results.push(item);

    // 递归处理子元素:数组遍历每个元素,对象遍历所有属性值
    if (Array.isArray(item)) {
      item.forEach(traverse);
    } else if (typeof item === 'object') {
      Object.values(item).forEach(traverse);
    }
  };

  // 启动遍历
  traverse(data);
  return results;
}

使用示例

1. 单参数搜索

查找所有包含"24AC"的元素:

const sampleData = [/* 示例JSON结构 */];
const singleParamResult = deepSearch("24AC", sampleData);
console.log(singleParamResult);
// 输出:[{"SKU":"24AC","name":"toothbrush","type":"cleaning item"}]

2. 多参数组合搜索

查找punctuation=20且SKU="23AC"的元素:

const multiParamResult = deepSearch({punctuation: 20, SKU: "23AC"}, sampleData);
console.log(multiParamResult);
// 输出:[{"SKU":"23AC","name":"hair brush","type":"cleaning item"}]

内容的提问来源于stack exchange,提问作者Esperanza Wiesse Gutierrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:15:31