¿Hay alguna forma de fusionar dos objetos, como Object.assign(a, b) , pero quiero que el mismo campo en a mantenga su valor de origen (sin anular de b ).
a = {x: 1, y: 2} b = {y: 3, z: 4} Object.assign(a, b) // Now we get a = {x: 1, y: 3, z: 4}, so what if I want {x: 1, y: 2, z: 4}? console.log(a)La mejor solución para esto es evitar usar Object.assign y usar el operador de propagación, ya que al hacerlo logrará su objetivo con una lógica simple. En el operador de propagación, el elemento más a la derecha sobrescribe el de la izquierda.
a = {x: 1, y: 2}; b = {y: 3, z: 4}; result = {...b, ...a}; result2 = {...a, ...b}; console.log(result); // {x: 1, y: 2, z: 4} console.log(result2); // {x: 1, y: 3, z: 4} let a = { x: 1, y: 2 }; let temp = { ...a }; let b = { y: 3, z: 4 }; Object.assign(a, b); Object.assign(a, temp); console.log(a);Puede usar Object.entries y filtrar las claves que ya están en a archivo .
p.ej.
a = {x: 1, y: 2} b = {y: 3, z: 4} //Object.assign(a, b) // Now we get a = {x: 1, y: 3, z: 4}, so what if I want {x: 1, y: 2, z: 4}? Object.assign(a, Object.fromEntries( Object.entries(b). filter(([k])=>!(k in a)))); console.log(a)