由X计数未完成它的循环

时间:2017-06-09 12:03:56

标签: javascript

我真的不明白为什么这个循环没有按预期工作,请看下面的例子,还有更好的方法吗?

   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)

3 个答案:

答案 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))