首页 > 解决方案 > 无法弄清楚使值相加的逻辑

问题描述

我正在做一个计算器项目,但就目前而言,我的计算器只能执行将两个数字相加的动作,而不是将我们稍后相加的所有数字相加。我无法弄清楚使其工作的逻辑,以便以顺序方式计算数字。谁能帮我这个?

例如,现在当你按下 2 + 2 时它返回 4,但是当你按下 2 + 2 + 4 时它返回 6,它应该表现得像一个普通的计算器,返回 8

我会很感激的,谢谢!这是我的程序的脚本:

var select = document.querySelector('#buttons')
var operating = document.querySelector('#operators')
let buttonequals = document.getElementById('button-equals')

select.addEventListener('click', selector)
operating.addEventListener('click', operatorSign)


let value;
let target;
let firstResult = 0;
let secondResult = 0;
let finalResult = 0;
let operand = "";


function selector(event) {
  target = event.target;
  if (target.matches('button')) {
    value = target.innerHTML
    value = Number(value);

    result = document.querySelector('#output').value += value
    result = Number(result)


    if (operand === "") {
      firstResult = Number(result)
      console.log(firstResult)
    } else {
      secondResult = Number(result)
      console.log(secondResult)
    }


  }}


function operatorSign(e) {
    let operator = e.target;
    if (operator.matches('button')) {
      operand = operator.innerHTML

      if (operand !== "=") {
          document.querySelector('#output').value = ""

      }

    }
}


function calculate() {


  if (operand === "+") {
    finalResult = firstResult + secondResult
    document.querySelector('#output').value = finalResult
    console.log(finalResult)
  } else if (operand === "-") {
    finalResult = firstResult - secondResult
    document.querySelector('#output').value = finalResult
  } else if (operand === "*") {
    finalResult = firstResult * secondResult
    document.querySelector('#output').value = finalResult
  } else if (operand === "/") {
    finalResult = firstResult / secondResult
    document.querySelector('#output').value = finalResult
  }

}

标签: javascript

解决方案


您可以使用Spread Operator获取可变数量的参数,然后计算总和。如下所示:

function calculate(...arg) {
    const sum = arg.reduce((acc, v) => {
  acc = acc + v;
  return acc;
  })
  console.log(sum);
}

calculate(1,2);
calculate(1,2,3,4);

推荐阅读