Este código fusiona dos objetos. ¿Cómo modificarlo para que se descarte una propiedad del primer objeto si existe en el segundo objeto?
Por ejemplo, el objeto 1 tiene esta propiedad:
surname: { test: '123', other: '124' },y objeto 2:
surname: { test: '124' }, La combinación usaría la propiedad del objeto 2 ( other: '124' no existiría en el resultado combinado)
function merge(...objects) { function m(t, s) { Object.entries(s).forEach(([k, v]) => { t[k] = v && typeof v === 'object' ? m(t[k] || {}, v) : v; }); return t; } return objects.reduce(m, {}); } var obj1 = { name: '112', surname: { test: '123', other: '124' }, age: 151, height: '183', weight: 80 }, obj2 = { name: '114', surname: { test: '124' }, age: 151, height: 184, weight: 81 }, result = merge(obj1, obj2); console.log(result);Parece que desea hacer una fusión superficial pero con objetos recreados para evitar referencias a los originales.
Una forma rápida de hacerlo es usar Object.assign para la fusión, y luego hacer un json stringify / parse ( con las limitaciones de lo que admite JSON ) para clonar el resultado y perder las referencias ( alternativamente, podría structuredCloned si su entorno/ el navegador lo admite ).
Entonces algo como
function merge(...objects) { const shallowClone = Object.assign({}, ...objects); const asString = JSON.stringify(shallowClone); const asObject = JSON.parse(asString); return asObject; }const a = { x:1, y:2} const b = { x:5 } const c = { ...a, ...b } console.log(c) // Answer will be {x: 5, y: 2}