Home > Net >  How to filter JSON data based on another JSON data in typescript
How to filter JSON data based on another JSON data in typescript

Time:10-05

I have 2 JSON Data 1. Payers 2. Rules. I need to filter Payers JSON data based on PayerId from Rules JSON data.

{
"Payers": [
{
  "payerId": "12345",
  "name": "Test Payer1"     
},
{
  "payerId": "23456",
  "name": "Test Payer2",
 
},
{
  "payerId": "34567",
  "name": "Test Payer3"
}}

Rules JSON file

  {
  "Rules": [
 {
  "actions": {
    "canCopyRule": true       
  },
  "RuleId": 123,
  "description": "Test Rule",
  "isDisabled": false,
  "Criteria": [       
    {
      "autoSecondaryCriteriaId": 8888,
      "criteriaType": { "code": "primaryPayer", "value": "Primary Payer" },         
      "payerId": ["12345", "34567"]
    }
  ]
}
}]}

I need to filter Payers JSON data based on Rules JSON data if PayerID matches

I need output like below

 {
 "Payers": [
 {
  "payerId": "12345",
  "name": "Test Payer1"     
},    
{
  "payerId": "34567",
  "name": "Test Payer3"
}
}

How to filter?

CodePudding user response:

You can use Array.filter like that (based on your data structure):

const filteredPayers = payersObj.Payers.filter((p) => rulesObj.Rules[0].Criteria[0].payerId.includes(p.payerId));

I can't figure out why your Rules json looks like this, I guess you have multiple rules. If so, you will need to iterate over each rule and invoke includes. Same for Criteria.

CodePudding user response:

Code will check each rule and each critirias and will return payers if payerId found in any of the given rules of any criteria

   
const payers = {
"Payers": [
{
  "payerId": "12345",
  "name": "Test Payer1"     
},
{
  "payerId": "23456",
  "name": "Test Payer2",
 
},
{
  "payerId": "34567",
  "name": "Test Payer3"
}]}
const rules = {
  "Rules": [
    {
      "actions": {
        "canCopyRule": true       
      },
    "RuleId": 123,
    "description": "Test Rule",
    "isDisabled": false,
    "Criteria": [       
      {
        "autoSecondaryCriteriaId": 8888,
        "criteriaType": { "code": "primaryPayer", "value": "Primary Payer" },         
        "payerId": ["12345", "34567"]
      }
    ]
  }
]
}

const data = payers.Payers.filter(payer => rules.Rules.findIndex(rule => rule.Criteria.findIndex(criteria => criteria.payerId.includes(payer.payerId)) != -1) !== -1)

console.log(data)

  • Related