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
相关产品推荐
相关产品推荐

