【问题标题】:Why won't this loop produce my desired result?为什么这个循环不会产生我想要的结果?
【发布时间】:2013-02-09 04:06:55
【问题描述】:

想要的结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

我的循环:

arr = []
n = 0; b = 0
while b < 2
  while n < 12
    arr.push n
    n++
  b++
return arr

实际结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

【问题讨论】:

  • 你也可以使用[1..12].concat [1..12]
  • 啊我不知道 JS 支持那个。非常感谢!
  • 或者技术上([1,2,3]+","+[1,2,3]).split(","),但它可能不是最有效的,并且对于包含字符串(可能包含“,”字符)的数组也不安全

标签: javascript jquery coffeescript


【解决方案1】:

在内部循环中将n的值重新初始化为0:

arr = []
n = 0; b = 0
while b < 2
  while n < 12
    arr.push n
    n++
  n = 0         // <------ Added this
  b++
return arr

这样,每次外部迭代都有一个“新鲜”值n

尽管如此,我得到的值是 0 到 11,而不是你想的 1 到 12。所以我会把它修改成这个(用真正的JS):

function test() {
    var arr = [];
    var n = 1;
    var b = 0;
    while (b < 2) {
        while (n <= 12) {
            arr.push(n);
            n++;
        }
        n = 1;
        b++;
    }
    return arr;
}

但正如@Blender 指出的那样,由于您实际上只是在模拟for 循环,因此请使用一个!:

function test2() {
    var arr = [];
    for (var b = 0; b < 2; b++) {
        for (var n = 1; n <= 12; n++) {
            arr.push(n);
        }
    }
    return arr;
}

【讨论】:

  • 您也可以只使用for 循环。
  • @Blender 当然,我只是想指出眼前的问题。快速发布答案,然后解释:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 2021-12-19
  • 2022-01-24
相关资源
最近更新 更多