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

如何根据匹配值移除嵌套对象数组中active为0的非活跃对象

问题根因

你的代码没有生效是两个逻辑错误导致的:

  • 外层clusters.filter()的判断条件不符合预期:Array.filter()需要回调返回布尔值决定当前元素是否保留,但你在回调里直接返回了cluster.goals.filter(goal => goal.active === 1)的执行结果——这个结果是一个数组,JS里空数组也属于真值,因此外层所有cluster项都会被保留,不会触发过滤。
  • 内层对goals的过滤结果没有被赋值回原cluster对象,相当于过滤操作执行完就被丢弃了,原数据结构自然不会发生任何变化。
正确实现

你需要先遍历每个cluster项,过滤掉其下active为0的goal,再将过滤后的goals数组更新到cluster中返回即可,推荐用不修改原数据的纯函数写法:

public stripGoalsByInactiveGoals(clusters) {
  return clusters.map(cluster => {
    // 过滤当前分组下的活跃目标
    const activeGoals = cluster.goals.filter(goal => goal.active === 1);
    // 返回新对象,避免直接修改原数据源产生副作用
    return {
      ...cluster,
      goals: activeGoals
    };
  });
}

如果你的需求还包含「某个cluster下所有goal都为非活跃时,直接移除整个cluster」,只需要在后面追加一层过滤即可:

public stripGoalsByInactiveGoals(clusters) {
  return clusters
    .map(cluster => ({
      ...cluster,
      goals: cluster.goals.filter(goal => goal.active === 1)
    }))
    // 移除没有任何活跃目标的分组
    .filter(cluster => cluster.goals.length > 0);
}
执行效果

传入你提供的示例数据,执行后返回的结果如下,完全符合剔除active=0对象的要求:

[
  {
    "id": 1,
    "title": "list of...",
    "goals": [
      {
        "id": 1570,
        "active": 1
      }
    ]
  },
  {
    "id": 2,
    "title": "more goals",
    "goals": [
      {
        "id": 1070,
        "active": 1
      }
    ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:24:25