Quiero verificar si una propiedad en un primer objeto existe dentro de un segundo objeto y cambiar su valor si es diferente, dinámicamente. Las propiedades del primer objeto pueden cambiar porque también se crea dinámicamente, y las propiedades del segundo objeto son siempre las mismas.
La lógica que necesito encontrar es la siguiente, pero en lugar de hacerlo manualmente (verificando cada propiedad y valor con una cláusula if diferente) ¿hay alguna forma de crear una función que haga esto dinámicamente? estoy usando vainilla javascript
function mapObject2(obj1) { if (sessionStorage.getItem("obj2") != null) { var obj2 = JSON.parse(sessionStorage.getItem("obj2")) if (obj1.Color != obj2.Color) { obj1.Color = obj2.Color } } }Puede usar Object.assign() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
function mapObject2(obj1) { if (sessionStorage.getItem("obj2") != null) { var obj2 = JSON.parse(sessionStorage.getItem("obj2")) Object.assign(obj1, obj2) } }Puede usar Object.assing como dijo @krasi pero la sintaxis correcta es esta
function mapObject2(obj1) { if (sessionStorage.getItem("obj2") != null) { var obj2 = JSON.parse(sessionStorage.getItem("obj2")) Object.assign(obj1, obj2) } } si desea devolver un nuevo objeto que es la fusión de obj1 y obj2 , puede hacer esto
function mapObject2(obj1) { if (sessionStorage.getItem("obj2") != null) { const obj2 = JSON.parse(sessionStorage.getItem("obj2")) return {...obj1, ...obj2} //or return Object.assign({}, obj1, obj2) } return obj1 } function mapObject2(obj1) { if (sessionStorage.getItem("obj2") != null) { const obj2 = JSON.parse(sessionStorage.getItem("obj2")) Object.keys(obj1).forEach(k => { obj1[k] = obj2[k] || obj1[k] }) } }