Tengo 2 objetos con datos que se repiten pero también varían. ¿Cómo compararlos y obtener las diferencias?
const obj1 = { surname: "kowalski", name: "adam", age: 23, city: "Wroclaw", country: "Poland", }; const obj2 = { name: "adam", age: 34, city: "Warszawa", country: "Poland", friend: "Ala", }; const objCombined = { ...obj1, ...obj2 }; Tengo que usar .reduce .
Mi trabajo:
const find = Object.entries(objCombined).reduce((diff, [key]) => { if (!obj2[key]) return diff; if (obj1[key] !== obj2[key]) diff[key] = obj2[key]; return diff; }, {}); pero la salida es sin surname: "kowalski" . Rendimiento esperado:
{surname: "kowalski", age: 34, city: "Warszawa", friend: "Ala"}Por favor usa este código
const find = Object.entries(objCombined).reduce((diff, [key]) => { if (!obj2[key]) { diff[key] = obj1[key]; return diff; } if (obj1[key] !== obj2[key]) diff[key] = obj2[key]; return diff; }, {});Eliminar if (!obj2[key]) return diff y agrega obj1[key]; si obj2[key]; es indefinido:
const obj1 = { surname: "kowalski", name: "adam", age: 23, city: "Wroclaw", country: "Poland", }; const obj2 = { name: "adam", age: 34, city: "Warszawa", country: "Poland", friend: "Ala", }; const objCombined = { ...obj1, ...obj2 }; const find = Object.entries(objCombined).reduce((diff, [key]) => { // if (!obj2[key]) return diff; if (obj1[key] !== obj2[key]) diff[key] = obj2[key] || obj1[key]; return diff; }, {}); console.log(find);Podemos usar Object.keys() y Array.reduce() para obtener la diferencia entre los dos objetos:
const obj1 = { surname: "kowalski", name: "adam", age: 23, city: "Wroclaw", country: "Poland", }; const obj2 = { name: "adam", age: 34, city: "Warszawa", country: "Poland", friend: "Ala", }; const diff = [...Object.keys(obj1), ...Object.keys(obj2)].reduce((acc, key) => { if (obj1[key] !== obj2[key]) { acc[key] = obj2[key] || obj1[key]; } return acc; }, {}) console.log("Diff:", diff);