skip to Main Content

I need to compare and manipulate JSON objects.

First object

let data1 = {
  "id": "111",
  "entity_id": "222",
  "text_id": "333",
  "details": [{
    "value": 1000,
    "comp_id": "444",
    "CompName": "driving"
  }]
}

Second object

let data2 = [{
  "id": "111",
  "text_id": "333",
  "criteria_type": "TXT",
  "value": 1000,
  "comp": {
    "id": "444",
    "name": "driving"
  }
}, {
  "id": "222",
  "text_id": "444",
  "criteria_type": "TXT",
  "value": 2000,
  "comp": {
    "id": "555",
    "name": "swiming"
  }
}]

There are 2 objects data1 and data2. Here, I need to compare the data1.details array with the data2 array key => data1.details.comp_id with data2.comp.id if not match then I need to push value, id and name to data1 object. Please help me to resolve this issue.

Resulting object

data1 will be:

{
  "id": "111",
  "entity_id": "222",
  "text_id": "333", 
  "declaration_details": [{
    "value": 1000,
    "comp_id": "444",
    "CompName": "driving",
  }, {
    "value": 2000,
    "comp_id": "555",
    "CompName": "swiming",
  }]
}

3

Answers


  1. You can use JSON.stringify(yourJsonObject) to convert your objects to strings.
    Then you can compare them like this. areEqual = string1 == string2. Make sure the object properties are in the same order for both objects.

    Login or Signup to reply.
  2. Use filter() to find objects in the data2 matching comp.id. Then you can just use map() to create a new array. Finally, you can add the mappedData2 array to the data1 in declaration_details.

    let filteredData2 = data2.filter(item => {
      return data1.details.some(detail => detail.comp_id === item.comp.id);
    });
    let mapData = filteredData2.map(item => {
      return {
        value: item.value,
        comp_id: item.comp.id,
        CompName: item.comp.name
      };
    });
    
    Login or Signup to reply.
  3. Based on your expected result, wouldn’t you just need to map data2 to the declaration_details of the resulting object?

    const main = () => {
      const { details, ...rest } = data1;
      const result = {
        ...rest,
        fbp_year: new Date().getUTCFullYear(),
        declaration_details: data2.map(({
          value,
          comp: {
            id: comp_id,
            name: CompName
          }
        }) => ({
          value,
          comp_id,
          CompName
        }))
      };
      console.log(result);
    };
    
    
    const
      data1 = {
        "id": "111",
        "entity_id": "222",
        "text_id": "333",
        "details": [{
          "value": 1000,
          "comp_id": "444",
          "CompName": "driving"
        }]
      },
      data2 = [{
        "id": "111",
        "text_id": "333",
        "criteria_type": "TXT",
        "value": 1000,
        "comp": {
          "id": "444",
          "name": "driving"
        }
      }, {
        "id": "222",
        "text_id": "444",
        "criteria_type": "TXT",
        "value": 2000,
        "comp": {
          "id": "555",
          "name": "swiming"
        }
      }];
      
    main();
    .as-console-wrapper { top: 0; max-height: 100% !important; }
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search