tengo 2 objetos
El único objeto es Original Data .
const origin = { name: 'John', id: 'Doe', item: { drink: 'coffee', money: 0 } } Y el otro objeto es Copied and Edited Data
const copied = { name: 'Alex', id: 'Doe', item: { drink: 'water', money: 0 } }Me gustaría compararlos y obtener solo diferencias.
const out = compareObj(origin, copied); console.log(out) /* { name: 'Alex', item: { drink: 'water' } } */¿Cómo puedo conseguir esto?
Gracias por adelantado.
Puede recorrer recursivamente el objeto y delete las propiedades no duplicadas del objeto de copy .
Y si existe una propiedad en el objeto original y no en la copy , agréguela al objeto de copy . La siguiente parte del código hace eso:
if (!copy.hasOwnProperty(k)) { copy[k] = v; } function compare(original, copy) { for (let [k, v] of Object.entries(original)) { if (typeof v === "object" && v !== null) { if (!copy.hasOwnProperty(k)) { copy[k] = v; } else { compare(v, copy?.[k]); } } else { if (Object.is(v, copy?.[k])) { delete copy?.[k]; } } } return copy; } const original = { name: "John", id: "Doe", item: { drink: "coffee", money: 0, honey: 24 } }, copy = { name: "Alex", id: "Doe", item: { drink: "water", money: 0 } }, diff = compare(original, JSON.parse(JSON.stringify(copy))); console.log(diff); Nota : debe pasar un clon del objeto de copy a la función, ya que muta el objeto de copy pasado.