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

Angular 8中基于多条件过滤对象数组的实现求助

基于lineId、Subfamily和status过滤对象数组的解决方案

需要对对象数组按以下规则过滤:

  • 若lineId相同但Subfamily不同,保留两个对象(如lineId为2的两个对象)
  • 若lineId和Subfamily相同但status不同,仅保留status为Submitted的对象(如lineId为3、Subfamily为03的两个对象)

现有代码仅实现了lineId过滤,需添加Subfamily相关逻辑。

响应数据

const data = [
    {
        "Subfamily": "01",
        "lineId": "2",
        "status": "Submitted"
    },
    {
        "Subfamily": "02",
        "lineId": "2",
        "status": "Submitted"
    },
    {
        "Subfamily": "03",
        "lineId": "3",
        "status": "Submitted"
    },
    {
        "Subfamily": "03",
        "lineId": "3",
        "status": "New"
    },
    {
        "Subfamily": "04",
        "lineId": "4",
        "status": "New"
    }
];

预期输出

const output = [
    {
        "Subfamily": "01",
        "lineId": "2",
        "status": "Submitted"
    },
    {
        "Subfamily": "02",
        "lineId": "2",
        "status": "Submitted"
    },
    {
        "Subfamily": "03",
        "lineId": "3",
        "status": "Submitted"
    },
    {
        "Subfamily": "04",
        "lineId": "4",
        "status": "New"
    }
];

现有代码

removeDuplicatesObject(data){
    const uniqueResponse = data.reduce((acc, item) => {
      if (!acc[item.lineId] || item.status === "Submitted") {
        acc[item.lineId] = item;
      }
      return acc;
    }, {});
    const uniqueResponseArray = Object.values(uniqueResponse);
    return uniqueResponseArray;
  }

修改后的解决方案

核心调整是用lineId和Subfamily的组合作为累加器的key,以此区分同lineId不同Subfamily的项;同时针对同一key下的不同status,优先保留Submitted状态的对象:

removeDuplicatesObject(data) {
    const uniqueResponse = data.reduce((acc, item) => {
        // 生成lineId+Subfamily的组合key,确保同lineId不同Subfamily的对象被分别存储
        const key = `${item.lineId}-${item.Subfamily}`;
        // 逻辑:key不存在则直接存入;若已存在,仅当当前项是Submitted时替换原有值
        if (!acc[key] || item.status === "Submitted") {
            acc[key] = item;
        }
        return acc;
    }, {});
    const uniqueResponseArray = Object.values(uniqueResponse);
    return uniqueResponseArray;
}

逻辑说明

  • 组合key${item.lineId}-${item.Subfamily}满足规则1:lineId相同但Subfamily不同的对象会被视为不同条目保留
  • 同一key下仅替换为Submitted项的逻辑满足规则2:当lineId和Subfamily都相同时,Submitted状态会覆盖New状态,最终只保留前者
  • 仅存在New状态的条目(如lineId为4的对象)会正常保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:17:30