我正在创建一个函数,该函数查找可被三整除的数字,然后将所有这些数字相加。例如,21 可被 3、6、9、12、15、18 和 21 整除。
然后我想将这些数字相加,结果将是 84。我能够将信息获取到数组中,然后遍历每个数组元素,但是当我添加它们时,它似乎将数组连接为字符串而不是添加数字。
我尝试将变量转换为数字,但我无法弄清楚我哪里出错了。
document.getElementById("btn").addEventListener("click", solution);
var outPutID = document.getElementById("outPutID");
function solution() {
var userInput1 = document.getElementById("userInput1ID").valueAsNumber;
var myArray = [];
var timesToAdd = parseFloat(userInput1 / 3);
var remainder = parseFloat(userInput1 % 3);
var total = (userInput1 - remainder) / 3;
for (i = 0; i < total; i++) {
var sum = 3 + (3 * i);
myArray[i] = parseInt(sum);
}
var sumArray;
for (a = 0; a < myArray.length; a++) {
sumArray += myArray[a];
}
outPutID.innerHTML = sumArray;
}
<input type="number" value="21" id="userInput1ID">
<input type="button" value="Go" id="btn">
<hr>
<div id="outPutID"></div>
代码有几个问题:
- 您正在使用
parseFloat
和parseInt
数字。没有必要或没有必要这样做,它们已经是数字了。 - 你从不声明
i
或a
,所以代码正在成为隐式全局的恐怖的牺牲品(这是我贫血的小博客上的一篇文章(
。但主要问题是sumArray
从未被赋予初始值,因此它采用默认值 undefined
.然后你用一个数字来+=
:
sumArray += myArray[a];
undefined + anyNumber
是NaN
,NaN + anyNumber
是NaN
。
您需要在开始时将0
分配给sumArray
:
document.getElementById("btn").addEventListener("click", solution);
var outPutID = document.getElementById("outPutID");
function solution() {
var userInput1 = document.getElementById("userInput1ID").valueAsNumber;
var myArray = [];
var timesToAdd = userInput1 / 3;
var remainder = userInput1 % 3;
var total = (userInput1 - remainder) / 3;
for (var i = 0; i < total; i++) {
var sum = 3 + (3 * i);
myArray[i] = sum;
}
var sumArray = 0;
for (var a = 0; a < myArray.length; a++) {
sumArray += myArray[a];
}
outPutID.innerHTML = sumArray;
}
<input type="number" value="21" id="userInput1ID">
<input type="button" value="Go" id="btn">
<hr>
<div id="outPutID"></div>