You need to enable JavaScript to run this app. JavaScript筛选对象数组:返回具备全部现有type属性的对象id
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript筛选对象数组:返回具备全部现有type属性的对象id

实现方案

不需要写复杂的嵌套循环,靠原生Array的内置方法分三步就能实现目标:

  • 先把数组里所有不重复的type值统计出来,确定需要覆盖的type总数量——毕竟要找的id必须把所有出现过的type都占全才行。
  • 按id做聚合,把同一个id关联的所有type值收集到一起。
  • 对比每个id收集到的type数量,和全量type的总数相等的,就是符合要求的id。

用到的核心数组方法

  • map:遍历数组提取指定字段值,用来拉取全量type、最后把筛选完的id从字符串转成数字类型
  • Set:借助它的去重能力,快速统计不重复type的数量,同时存每个id对应的type集合
  • reduce:用来遍历做按id的分组聚合,比写for循环简洁
  • filter:从聚合结果里筛出符合条件的id

完整可运行代码

const flags = [
  {
    type: "manyCards",
    id: 1
  },
  {
    type: "manyCards",
    id: 2
  },
  {
    type: ":premiumCard",
    id: 1
  },
]

// 1. 统计全量不重复的type总数,作为校验基准
const requiredTypeCount = new Set(flags.map(item => item.type)).size;

// 2. 按id聚合,收集每个id对应的所有type
const idAccumulator = flags.reduce((group, current) => {
  // 首次碰到某个id时,初始化一个空集合存它对应的type
  if (!group[current.id]) group[current.id] = new Set();
  group[current.id].add(current.type);
  return group;
}, {});

// 3. 筛选出覆盖了全部type的id,转成数字类型得到最终结果
const result = Object.keys(idAccumulator)
  .filter(idKey => idAccumulator[idKey].size === requiredTypeCount)
  .map(idKey => Number(idKey));

结果说明

跑通代码后得到的result值为[1],和示例的预期完全匹配:

  • 全量type一共2种,id=1关联的type刚好是这2种,符合要求
  • id=2只关联了1种type,没有覆盖全部type,会被过滤掉

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 08:15:09