I have a object like below. I can find difference with 'curtain' if i change quantity of it. But in this case it's not working 'sofa' with my function. I want my result will is have all properties of element have property change
obj1 = {
sofa: [
{
name: 'leather',
typeSofa: [
{
name: 'type1',
text: 'type1',
quantity: 1
},
{
name: 'type2',
text: 'type2',
quantity: 1
}
],
stool: [
{
name: 'type1',
text: 'type1',
quantity: 1
},
{
name: 'type2',
text: 'type2',
quantity: 1
}
]
},
{
name: 'fabric',
typeSofa: [
{
name: 'type1',
text: 'type1',
quantity: 1
}
],
stool: [
{
name: 'type1',
text: 'type1',
quantity: 1
},
{
name: 'type2',
text: 'type2',
quantity: 1
}
]
}
],
curtain: {
dryclean: [{
name: 'text1',
text: 'text1',
quantity; 1
}];
}
}
and
obj2 = {
sofa: [
{
name: 'leather',
typeSofa: [
{
name: 'type1',
text: 'type1',
quantity: 2
},
{
name: 'type2',
text: 'type2',
quantity: 1
}
],
stool: [
{
name: 'type1',
text: 'type1',
quantity: 1
},
{
name: 'type2',
text: 'type2',
quantity: 1
}
]
},
{
name: 'fabric',
typeSofa: [
{
name: 'type1',
text: 'type1',
quantity: 1
}
],
stool: [
{
name: 'type1',
text: 'type1',
quantity: 1
},
{
name: 'type2',
text: 'type2',
quantity: 1
}
]
}
],
curtain: {
dryclean: [
{
name: 'text1',
text: 'text1',
quantity; 1
}
];
}
}
In obj2 i just change quantity: 2 How can i have result using js or lodash
result = {
sofa: [
{
name: 'leather',
typeSofa: [
{
name: 'type1',
text: 'type1'
quantity: 2
}
]
}
]
}
const findDifferences = (obj1, obj2) => {
// Find the keys that are in both objects
const keys = _.intersection(Object.keys(obj1), Object.keys(obj2));
// Iterate through the keys
return keys.reduce((diff, key) => {
const val1 = obj1[key];
const val2 = obj2[key];
// If the values are arrays, compare them using _.differenceWith() and recursion
if (_.isArray(val1) && _.isArray(val2)) {
diff[key] = _.differenceWith(val2, val1, _.isEqual);
if (diff[key].length === 0) delete diff[key];
}
// If the values are objects, recursively call findDifferences() on them
else if (_.isObject(val1) && _.isObject(val2)) {
const nestedDiff = findDifferences(val1, val2);
if (!_.isEmpty(nestedDiff)) diff[key] = nestedDiff;
}
// Otherwise, compare the values directly using _.isEqual()
else if (!_.isEqual(val1, val2)) {
diff[key] = val2;
}
return diff;
}, {});
};
I expected result like this with my function
result = {
sofa: [
{
name: 'leather',
typeSofa: [
{
name: 'type1',
text: 'type1'
quantity: 2
}
]
}
]
}