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

如何用JavaScript筛选包含指定数组所有元素的嵌套对象数组

使用JavaScript筛选包含指定所有联系人的嵌套对象数组

需求说明

给定目标名称数组:

const targetNames = ["Javascript", "Salesforce"];

以及如下嵌套对象数组:

const data = [
  {
    "Id":"1",
    "Country":"USA",
    "Contact":[
      {
        "Name":"Javascript",
        "City":"ABC",
      },
    ],
  },
  {
    "Id":"2",
    "Country":"USA",
    "Contact":[
      {
        "Name":"Javascript",
        "City":"ABC",
      },
      {
        "Name":"Salesforce",
        "City":"XYZ",
      },
    ],
  },
];

需要筛选出Contact子数组包含所有目标名称的记录,最终保留Id为2的对象。

实现方案

方案1:基础实现(filter + every + some)

通过数组高阶方法组合实现核心筛选逻辑:

const filteredData = data.filter(item => {
  // 验证目标数组的每个名称,都能在当前项的Contact中找到匹配项
  return targetNames.every(targetName => {
    return item.Contact.some(contact => contact.Name === targetName);
  });
});

console.log(filteredData);

方案2:性能优化(用Set减少重复查询)

当数据量较大时,将Contact的名称存入Set可将查询复杂度从O(n)降为O(1),大幅提升效率:

const filteredData = data.filter(item => {
  // 提取当前项所有联系人名称,存入Set以快速查询
  const contactNameSet = new Set(item.Contact.map(contact => contact.Name));
  // 验证所有目标名称都存在于Set中
  return targetNames.every(name => contactNameSet.has(name));
});

console.log(filteredData);

最终输出结果

执行上述代码后,会得到期望的筛选结果:

[
  {
    "Id":"2",
    "Country":"USA",
    "Contact":[
      {
        "Name":"Javascript",
        "City":"ABC",
      },
      {
        "Name":"Salesforce",
        "City":"XYZ",
      },
    ],
  },
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:45:18