我真的不明白为什么这个循环没有按预期工作,请看下面的例子,还有更好的方法吗?
function countBy(x, n) {
var z = [];
for (let i = x; i + x < x * n; i = i + x) {
z.push(i);
}
return z;
}
预期:&#39; [1,2,3,4,5]&#39;,代替:&#39; [1,2 ,3]&#39; (x:1,n:5)
预期:&#39; [2,4,6,8,10]&#39;,改为:&#39; [2,4,6] &#39; (x:2,n:10)
答案 0 :(得分:2)
当x
为1且n
为5时,i
将从1升至4.当i
为4时,循环将停止,因为1 + 4不低于1 * 5.
类似地,对于x
为2且n
为10的情况。编写循环条件使得它对于您的要求而言太早终止。它应该是
for (let i = x; i <= x * n; i = i + x)
答案 1 :(得分:0)
您不期望的结果是正确的。
您的代码相当于:
function countBy(x, n) {
var z = [];
for (let i = x; i < x * (n-1); i = i + x) {
z.push(i);
}
return z;
}
相当于:
function countBy(x, n) {
var z = [];
for (let i = x; i <= x * (n-2); i = i + x) {
z.push(i);
}
return z;
}
这意味着当n
为5时,循环只会在i
是x的3倍之前有效。
正确的代码是:
function countBy(x, n) {
var z = [];
for (let i = x; i <= x * n; i = i + x) {
z.push(i);
}
return z;
}
但是,要匹配您的第二个示例,代码必须是:
function countBy(x, n) {
var z = [];
for (let i = x; i <= n; i = i + x) {
z.push(i);
}
return z;
}
只有您知道自己想要的版本。
答案 2 :(得分:0)
你想用x计算n,所以试试这个:
function countBy(x, n) {
var z = [];
for (let i = x; i <= n; i = i + x) {
z.push(i);
}
return z;
}
console.log(countBy(1,5))
console.log(countBy(2,10))
console.log(countBy(3,10))