You need to enable JavaScript to run this app. JavaScript如何获取数组中id与serviceName不同组合对应的最后一条对象
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何获取数组中id与serviceName不同组合对应的最后一条对象

问题原因

你现有代码仅将id作为Map的唯一键,同id下不同serviceName的条目会互相覆盖,最终每个id只会保留最后一条数据,因此无法得到id+serviceName组合对应的独立结果。

解决方案

将Map的键调整为id与serviceName的组合值,保证每个(id, serviceName)组合对应唯一键,遍历过程中后出现的同组合条目会覆盖前者,最终提取的values就是每个组合的最后一条对象:

let services = [
    {
      "id": "1",
      "serviceName": "TapiSrv",
      "serviceStatus": "StopPending"
    },
    {
      "id": "1",
      "serviceName": "TapiSrv",
      "serviceStatus": "StartPending"
    },
    {
      "id": "1",
      "serviceName": "TapiSrv",
      "serviceStatus": "StopPending"
    },
    {
      "id": "1",
      "serviceName": "TapiSrv",
      "serviceStatus": "Stopped"
    },
    {
      "id": "1",
      "serviceName": "Themes",
      "serviceStatus": "Stopped"
    },
    {
      "id": "1",
      "serviceName": "Themes",
      "serviceStatus": "Running"
    },
    {
      "id": "2",
      "serviceName": "TapiSrv",
      "serviceStatus": "StopPending"
    },
    {
      "id": "2",
      "serviceName": "TapiSrv",
      "serviceStatus": "StartPending"
    },
    {
      "id": "2",
      "serviceName": "TapiSrv",
      "serviceStatus": "StopPending"
    },
    {
      "id": "2",
      "serviceName": "TapiSrv",
      "serviceStatus": "Stopped"
    },
    {
      "id": "2",
      "serviceName": "Themes",
      "serviceStatus": "Stopped"
    },
    {
      "id": "2",
      "serviceName": "Themes",
      "serviceStatus": "Running"
    }     
];
    
const sId = 'id';
const sName = 'serviceName';
// 用|作为分隔符拼接两个字段作为唯一键,避免字段本身内容冲突
const arrayUniqueKey = [...new Map(services.map(item => [`${item[sId]}|${item[sName]}`, item])).values()];
    
console.log(arrayUniqueKey);

输出结果

执行上述代码后输出内容和你期望的结果完全一致:

[
    {
        "id": "1",
        "serviceName": "TapiSrv",
        "serviceStatus": "Stopped"
    },
    {
        "id": "1",
        "serviceName": "Themes",
        "serviceStatus": "Running"
    },
    {
        "id": "2",
        "serviceName": "TapiSrv",
        "serviceStatus": "Stopped"
    },
    {
        "id": "2",
        "serviceName": "Themes",
        "serviceStatus": "Running"
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:54:04