Skip to content
Advertisement

Javascript json object how to move changed data to a new object

I have 2 json object.

the first one holds data from the client form.

{
       "name": "Example name",
       "company": {
         "name": "new company",
         "size": "FIVE",
         "licenseInfo": {
            "isActive": "0"
         }
       }
}

and in my other object, I know which fields are modified in this form. If value is true then it has changed. The plugin I use gives me this information.

{
       "name": true,
       "company": { 
         "size": true,
         "licenseInfo": {
            "isActive": true
         }
       }
}

I want to compare these 2 objects and get a submit object with only changed data as follows. company name has not been changed and I do not want to submit company.name

{
       "name": "Example name",
       "company": { 
         "size": "FIVE",
         "licenseInfo": {
            "isActive": "0"
         }
       }
}

I can manually control the fields one by one, but I want to create a dynamic compare function so I can use it on my other forms.

Advertisement

Answer

Iterate by keys (compare) and add input values…

const input = { "name": "Example name", "company": { "name": "new company", "size": "FIVE", "licenseInfo": { "isActive": "0" } } }
const compare = { "name": true, "company": { "size": true, "licenseInfo": { "isActive": true } } }

function filter(input, compare) {
    const output = {};
    for (const key in compare)
        output[key] = typeof compare[key] == "object"
            ? filter(input[key], compare[key])
            : input[key];

    return output;
}
console.log(filter(input, compare));
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement