Cómo lograr este resultado:
const defaultValues = { a:1, b:1 , c:1};// All acceptable properties const overrideValues = { a:2, x: 3, y: 3, z:3 };// from user const values = ? ;// console.log(values); // output: // Object { a: 2, b: 1, c: 1 }Gracias,
Post-Edit: Gracias a todos por su valiosa ayuda. (Leí la pregunta duplicada: actualice el objeto javascript con otro objeto, pero solo las claves existentes)
Sin embargo, todavía te ofrezco mi solución:
const overrideValues = { a:2, x: 3, y: 3, z:3 }; const defaultValues = { a: overrideValues.a || 1, b: overrideValues.b || 1, c: overrideValues.c || 1 }; const values = defaultValues ;// ! console.log(values); // output: // Object { a: 2, b: 1, c: 1 }Puede asignar las entradas de los valores predeterminados y establecer el valor en el valor de overrideValues para cada clave que existe en ese objeto.
const defaultValues = { a:1, b:1 , c:1}; const overrideValues = { a:2, x: 3, y: 3, z:3 }; const values = Object.fromEntries(Object.entries(defaultValues) .map(([k,v])=>[k, overrideValues.hasOwnProperty(k) ? overrideValues[k] : v])); console.log(values);Puede usar la sintaxis extendida :
const defaultValues = { a:1, b:1 , c:1};// All acceptable values const overrideValues = { a:2, x: 3, y: 3, z:3 }; const values = {...defaultValues, ...overrideValues}; console.log(values);La sintaxis extendida le permite desestructurar un objeto o matriz, y puede usar esa reestructuración para tener valores predeterminados. Si hay varias instancias de un par clave/valor, se usa el segundo valor que se ve para esa clave, lo que le permite anular los valores predeterminados.