簡體   English   中英

javascript-根據內部條件過濾列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM