[英]javascript - filter list against inner condition
我有一個案例,我需要篩選具有特定條件的合同的代理人列表(待批准的合同狀態)
json看起來像是agent的樣子->具有一個載體數組->具有一個合約數組(我針對contractStatus進行了過濾)
{
agent_id: "19831225",
agent_carriers: [
{
agent_id: 19831225,
agent_carrier_id: 10462,
carrier: "Aetna US Health Care",
contracts: [
{
agent_id: 19831225,
contractStatus: "APPROVED",
},{
agent_id: 19831226,
contractStatus: "Submitted",
}
]
}
我的代碼
unfilteredAgents.forEach((agent, agentIndex) => {
agent.agent_carriers.forEach((agentCarrier, index) => {
const matchedContracts = agentCarrier.contracts.filter(contract => {
console.log(searchKeys, " match With ", contract.contractStatus);
return searchKeys.includes(contract.contractStatus);
});
if (matchedContracts.length > 0) {
agentCarrier.contracts = matchedContracts;
} else {
agent.agent_carriers.splice(index, 1);
}
});
if(agent.agent_carriers.length === 0){
agent.agent_carriers.splice(index, 1);
}
});
這段代碼顯示了錯誤的數據,我不會錯過我的感謝
更新我的問題,我只需要APPROVED
代理商
這種方法提供了一系列statuses
,以使其更動態,更廣泛。 基本上,此方法檢查contractStatus
statuses
在數組statuses
每個對象。
這種方法不會改變原始數組。
let agents = [{ agent_id: "19831225", agent_carriers: [{ agent_id: 19831225, agent_carrier_id: 10462, carrier: "Aetna US Health Care", contracts: [{ agent_id: 19831225, contractStatus: "APPROVED" }] }]}, { agent_id: "198312256565", agent_carriers: [{ agent_id: 198312254545, agent_carrier_id: 10462, carrier: "Ele Agent", contracts: [{ agent_id: 19831225455, contractStatus: "REJECTED" },{ agent_id: 19831225455, contractStatus: "APPROVED" }] }]}], statuses = ["APPROVED"], filtered = agents.filter(({agent_carriers}) => agent_carriers.some(({contracts}) => contracts.every(({contractStatus}) => statuses.includes(contractStatus)))); console.log(filtered);
.as-console-wrapper {min-height: 100%;}
您也可以過濾內部數組和外部數組,具體取決於內部過濾。
var unfilteredAgents = [{ agent_id: "19831225", agent_carriers: [{ agent_id: 19831225, agent_carrier_id: 10462, carrier: "Aetna US Health Care", contracts: [{ agent_id: 19831225, contractStatus: "APPROVED", }, { agent_id: 19831225, contractStatus: "foo", }] }, { agent_id: 99, agent_carrier_id: 10462, carrier: "Aetna US Health Care", contracts: [{ agent_id: 19831225, contractStatus: "fo", }, { agent_id: 19831225, contractStatus: "foo", }] }] }, { agent_id: "19831225", agent_carriers: [{ agent_id: 19831225, agent_carrier_id: 10462, carrier: "Aetna US Health Care", contracts: [{ agent_id: 19831225, contractStatus: "foo", }] }, { agent_id: 99, agent_carrier_id: 10462, carrier: "Aetna US Health Care", contracts: [{ agent_id: 19831225, contractStatus: "fo", }, { agent_id: 19831225, contractStatus: "foo", }] }] }], searchKeys = ["APPROVED"], result = unfilteredAgents.filter(agent => { var carriers = agent.agent_carriers.filter(agentCarrier => { const matchedContracts = agentCarrier.contracts.filter(({ contractStatus }) => searchKeys.includes(contractStatus)); if (matchedContracts.length) { agentCarrier.contracts = matchedContracts; return true; } }); if (carriers.length) { agent.agent_carriers = carriers; return true; } }); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.