digamos que tengo:
object1 = { atk: 3, def: 6, hp: 4, level: 17, }; object2 = { atk: 1, def: 4, hp: 2, level: 10, };
quiero multiplicar los dos objetos, así que termino con
object3 = { atk: 3, // 1 * 3 def: 24, // 4 * 6 hp: 8, // 2 * 4 level: 170, // 17 * 10 };
lo intenté así
let obj3 = {}; obj3.atk = object1.atk * object2.atk; obj3.def= object1.def * object2.def; //etc....
pero no estoy seguro de si hay alguna manera más simple ya que hay más claves/valores de los que he enumerado aquí.
Una de las soluciones más simples (complejidad de código) probablemente sería usar un bucle for...in
simple, iterando sobre las teclas del primer objeto.
const object1 = { atk: 3, def: 6, hp: 4, level: 17 }; const object2 = { atk: 1, def: 4, hp: 2, level: 10 }; const obj3 = {}; for (const key in object1) { obj3[key] = object1[key] * object2[key]; } console.log(obj3);
Esto supone que object1
y object2
tienen las mismas claves.
Puede usar una combinación de Object.entries
para desempaquetar un objeto de origen (por ejemplo, object1
) y el mapa a través de él para multiplicar sus valores con el valor correspondiente obtenido al usar key
como acceso en object2
.
Una vez hecho esto, se trata de usar Object.fromEntries
para convertir las tuplas [key, value]
nuevamente en un objeto:
const object1 = { atk: 3, def: 6, hp: 4, level: 17, }; const object2 = { atk: 1, def: 4, hp: 2, level: 10, }; const object3 = Object.fromEntries(Object.entries(object1).map(([key, value]) => { value *= object2[key]; return [key, value]; })); console.log(object3);
Supongo que la forma más elegante de hacerlo es usando el método de matriz de reduce
, combinado con la función Object.keys()
, que devuelve una matriz que contiene las claves del objeto:
const object1 = { atk: 3, def: 6, hp: 4, level: 17, }; const object2 = { atk: 1, def: 4, hp: 2, level: 10 }; const object3 = Object.keys(object1).reduce((result, key) => { result[key] = object1[key] * object2[key]; return result; }, {}); console.log(object3);