javascript - 无法弄清楚使值相加的逻辑
问题描述
我正在做一个计算器项目,但就目前而言,我的计算器只能执行将两个数字相加的动作,而不是将我们稍后相加的所有数字相加。我无法弄清楚使其工作的逻辑,以便以顺序方式计算数字。谁能帮我这个?
例如,现在当你按下 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
}
}
解决方案
您可以使用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);
推荐阅读
- c++ - Sizeof 返回指针大小而不是数组大小。有没有其他方法可以找到尺寸?
- python - Docker 在卷中运行应用程序
- mysql - Mysql:如何检索具有相同id但列中值不同的两行
- javascript - 无法使用 js 循环下载 Firebase 存储文件
- python - 无法将镶木地板文件读入 jupyter 笔记本
- scala - 如何使用udf更新包含数组的spark数据框列
- java - 覆盖子类中的父方法。子方法不做任何事情
- google-apps-script - 使用身份验证从 Dialogflow 向 Appscript 发送请求
- javascript - 使用 React 的计时器应用程序:每次渲染后都会清除 setInterval
- jmeter - 如何为线程组中的单个请求实现 10tps 吞吐量