Reputation: 319
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.
Upvotes: 1
Views: 73
Reputation: 2473
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));
Upvotes: 2