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

如何在JavaScript中过滤JSON数据:排除含revert标签的CGI项

问题描述

我有一个包含cgi、tag、name键的JSON对象数组,其中cgi值可能重复。需求为:若某个cgi对应的任意对象中tag为'revert',则该cgi的所有对象都不返回。尝试使用filter方法未得到正确结果,请求正确实现方案。

输入示例

[
  {
    "cgi": "abc-123",
    "tag": "revert",
    "name": "Piyush"
  },
  {
    "cgi": "abc-123",
    "tag": null,
    "name": "Piyush"
  },
  {
    "cgi": "abc-456",
    "tag": null,
    "name": "Piyush"
  },
  {
    "cgi": "abc-789",
    "tag": null,
    "name": "Piyush"
  }
]

预期输出

[
  {
    "cgi": "abc-456",
    "tag": null,
    "name": "Piyush"
  },
  {
    "cgi": "abc-789",
    "tag": null,
    "name": "Piyush"
  }
]

错误尝试代码

data = data.filter(es => es.tag == 'filter')
实现方案

问题核心是需要先标记出所有关联tag: 'revert'的cgi,再整体排除这些cgi对应的所有对象,具体实现步骤如下:

  1. 收集需要排除的cgi集合:过滤出所有tag为'revert'的对象,提取它们的cgi值并存入Set(自动去重)。
  2. 过滤原数组:保留所有cgi不在排除集合中的对象。

正确代码示例

// 收集所有带有revert标签的cgi
const forbiddenCgis = new Set(
  data.filter(item => item.tag === 'revert').map(item => item.cgi)
);

// 过滤数组,排除所有属于禁入cgi的对象
const result = data.filter(item => !forbiddenCgis.has(item.cgi));

错误原因说明

你之前的代码仅尝试过滤tag等于'filter'的对象(疑似笔误,应为'revert'),但这种方式只能移除单个tag为'revert'的条目,无法关联同一cgi下的其他对象,所以无法满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:16:06