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

如何通过查询对象内的多个键值条件过滤嵌套结构的对象数组

实现方案

你可以用以下通用过滤函数完成多条件匹配,完美适配你给出的嵌套数据结构和查询格式:

// 通用多条件过滤函数
function filterData(data, query) {
  return data.filter(item => {
    // 校验当前项是否满足所有查询条件
    return query.args.every(condition => {
      const { key, value } = condition;
      // 提取对应字段的$t值,统一转小写做大小写不敏感匹配
      const targetValue = item[key]?.['$t']?.toLowerCase();
      return targetValue === value.toLowerCase();
    })
  })
}

// 测试示例
// 你的原始数据
const originData = [
  {
    'xml:id': 'Name1',
    sex: {
        '$t': 'M'
    },
    occupation: {
        n: 1,
        '$t': 'bank'
    }
  },
  {
    'xml:id': 'Name2',
    sex: {
        '$t': 'M'
    },
    occupation: {
        n: 1,
        '$t': 'writer'
    }
  }, 
  {
    'xml:id': 'Name3',
    sex: {
        '$t': 'F'
    },
    occupation: {
        n: 1,
        '$t': 'bank'
    }
  }, 
  {
    'xml:id': 'Name4',
    sex: {
        '$t': 'M'
    },
    occupation: {
        n: 1,
        '$t': 'writer'
    },
  }, 
  {
    'xml:id': 'Name5',
    sex: {
        '$t': 'M'
    },
    occupation: {
        n: 1,
        '$t': 'writer'
    }
  }
]

// 你的查询对象
const pers_query = {
  type: 'person',
  args: [
    {
      key: 'occupation',
      value: 'bank',
    },
    {
      key: 'sex',
      value: 'f',
    },
  ],
};

// 执行过滤
const result = filterData(originData, pers_query);
console.log(result);
输出结果

执行后得到的结果和你预期完全一致:

[
  {
    'xml:id': 'Name3',
    sex: { '$t': 'F' },
    occupation: { n: 1, '$t': 'bank' }
  }
]
逻辑说明
  • 用Array.filter遍历原始数组筛选符合条件的项
  • 用Array.every校验每个项是否满足所有查询条件,默认是且的逻辑,符合你的需求
  • 匹配时统一将目标值和查询值转成小写,自动适配大小写不一致的场景(比如你查询的是小写f,数据存的是大写F也能正确匹配)
  • 自动适配你给出的嵌套$t字段结构,如果后续新增其他需要查询的字段只要结构一致,不用修改函数直接加查询条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 06:30:01