Novato aquí, estoy atascado con mi proyecto de Calculadora y no puedo continuar. Hay algo mal con mi código y no puedo averiguar qué.
Entonces, el problema involucra operaciones en números de varios dígitos (por ejemplo, 22), así como multiplicar / dividir después de sumar / deducir.
Anteriormente estaba luchando con múltiples operaciones en general, pero parece que ahora funciona (aunque solo con números de 1 dígito). Cada vez que inserto, por ejemplo, 23, la función asigna 23 al primer y segundo operandos y me da 46.
Lo mismo sucede cuando uso un operador en la segunda operación que es diferente al que usé en la primera operación (por ejemplo, si uso el operador de suma dos veces y luego deduzco, mi resultado será cero ya que el resultado se asigna a ambos operandos y continúa con la operación).
¿Alguien podría aconsejarme cuál es el problema con este código? Creo que es por la variable "operando1". El comportamiento esperado sería que la función se detuviera después de cada clic, pero tan pronto como el valor del operando 1 cambie a "vacío" nuevamente, el código continúa. Traté de anular esto, pero nada de lo que se me ocurre funciona, siento que me estoy perdiendo algo básico.
¡Gracias por adelantado!
let add = (a, b) => a + b; let subtract = (a, b) => a - b; let multiply = (a, b) => a * b; let divide = (a, b) => a / b; function operate(operator, a, b) { if (operator === '+') { return add(a, b); } else if (operator === '-') { return subtract(a, b); } else if (operator === '*') { return multiply(a, b); } else { return divide(a, b); } }; const display = document.querySelector("h1"); // display const numButtons = document.querySelectorAll(".num"); // 0 - 9 const operateButtons = document.querySelectorAll(".operator"); // +, -, *, / const equals = document.querySelector('#equals') // = const clearBtn = document.querySelector('#clear'); // AC let displayValue = []; // add clicked numbers to array let displayNumbers; // joined array let operations = ['a','operator','b']; let operand1 = "empty"; // value that shows if 1st num has already been selected numButtons.forEach((button) => { button.addEventListener('click', function() { displayValue.push(this.innerText); displayNumbers = displayValue.join(""); display.textContent = displayNumbers; operateButtons.forEach((button) => { button.addEventListener('click', function insertOperand() { if(operand1 === "empty") { operations[0] = Number(displayNumbers); operations[1] = this.textContent; displayValue = []; operand1 = "inserted"; } else if (operand1 === "inserted") { operations[2] = Number(displayNumbers); result = operate(operations[1],operations[0],operations[2]); display.textContent = result; displayNumbers = result; displayValue = []; operand1 = "empty"; button.removeEventListener('click',insertOperand); } }); }); }); });