【发布时间】:2016-10-24 02:00:38
【问题描述】:
在这里开始 JavaScript 学习者...
我正在研究 Adrian Neumann 的 Simple Programming Problems,我的问题是关于初级练习中的第 5 题。
编写一个程序,要求用户输入一个数字 n 并打印数字 1 到 n 的总和...以便只考虑 3 和 5 的倍数。
这是我目前的代码...
var myArray = [];
var mySum = 0;
var userNum = prompt("What is your number? "); {
for (var i = userNum; i > 0; i--) {
if (i % 5 === 0 || i % 3 === 0) {
mySum += myArray.push(i);
}
}
}
console.log(mySum);
这会产生不正确的结果28。当我注释掉mySum 语句并打印17 输入的数组时,我得到了看起来正确的[15, 12, 10, 9, 6, 3]。
我想知道为什么mySum 语句没有提供预期结果的提示。我也会对提高代码效率的任何技巧感兴趣。非常感谢!
编辑
对于任何感兴趣的人,这是我选择的最适合我的目的和当前级别的代码:
var mySum = 0;
var userNum = prompt("What is your number? ");
for (var i = userNum; i > 0; i--) {
if (i % 5 === 0 || i % 3 === 0) {
mySum += +i; // type coercion with unary operator
}
}
console.log(mySum);
谢谢大家!
【问题讨论】:
-
为什么是数组?
mySum += i;或者如果你想:mySum += i; myArray.push(i);或myArray.push(i);然后减少数组:sum = myArray.reduce(function(a, b) { return a + b; }); -
Array.prototype.push 返回数组的新长度,而不是您提供的值,这就是您的总和不正确的原因。
-
注意外部
{ ... }不是必需的。 -
array.push 和 array.pop 方法是有区别的。在编写之前知道代码会做什么是件好事。当您使用 Array 时,建议您查看以下链接 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。
-
我认为你不需要数组来解决这个问题
标签: javascript arrays type-conversion coercion