Entonces, quiero ejecutar dos objetos a través de esta función, hacer que compare las claves y luego agregar los valores de las claves que coinciden. Por alguna razón, solo corta el primer par clave/valor y no estoy seguro de por qué. Supongo que tiene algo que ver con los bucles for anidados, pero parece que no puedo entender dónde está el mal funcionamiento.
const necro = { health: 6, attack: 2, armor: 4, focus: 0, speed: 0, recover: 10, } const baseCharacter = { health: 8, attack: 8, armor: 8, focus: 8, speed: 8, recover: 8, } const statCompare = (myObj,staticObj) => { let myVal = Object.values(myObj) let baseVal = Object.values(staticObj) let newVal = [] for(let i = 0; i < myVal.length;i++) { for(let j = 0; j < baseVal.length;j++){ if (i=j){ statSum = myVal[i] + baseVal[j] newVal.push(statSum) } } } return newVal } npcStats = statCompare(necro, baseCharacter) console.log(npcStats)consola.log devuelve [10,12,8,8,18]
const necro = { health: 6, attack: 2, armor: 4, focus: 0, speed: 0, recover: 10, } const baseCharacter = { health: 8, attack: 8, armor: 8, focus: 8, speed: 8, recover: 8, } const statCompare = (myObj, staticObj) => { const result = []; for (let [k1, v1] of Object.entries(myObj)) { for (let [k2, v2] of Object.entries(staticObj)) { if (k1 === k2) result.push(v1 + v2); } } return result; } console.log(statCompare(necro, baseCharacter));No confíe en el índice de valores de objetos para comparar diferentes objetos. Es un enfoque propenso a errores. En su lugar, confíe en las claves de objeto.
En realidad, tengo varias notas en su código:
mergeObjectValues .NaN .Por lo tanto, un mejor código es como el siguiente:
const necro = { health: 6, attack: 2, armour: 4, focus: 0, speed: 0, recover: 10, } const baseCharacter = { health: 8, attack: 8, armour: 8, focus: 8, speed: 8, recover: 8, } const mergeObjectValues = (myObj, staticObj) => { const result = {}; // keys should be from object with full list of possible keys const keys = Object.keys(myObj); keys.forEach(k => { const v1 = myObj[k] || 0; const v2 = staticObj[k] || 0; result[k] = v1 + v2; }); return result; } console.log(mergeObjectValues(necro, baseCharacter));El resultado es claro y fácil de trabajar con más:
{ "health": 14, "attack": 10, "armour": 12, "focus": 8, "speed": 8, "recover": 18 } Si realmente necesita solo una matriz de números y el orden no es importante, este es el lugar donde usa Object.values