coffeescript for循环中的奇怪行为

coffeescript for循环中的奇怪行为,coffeescript,iterator,Coffeescript,Iterator,我试图在CoffeeScript中迭代数组,但有一些奇怪的行为。 例如,查看以下代码: kapa = [1] for i in kapa console.log 't' kapa.push 1 我希望这段代码在控制台中生成无限序列的“t”符号。但实际上,它只打印一个“t”。 这种行为背后的逻辑是什么? 我怎样才能达到预期的行为? 说明: 我想实现所有新元素都将被处理时的行为它只打印一次的原因是因为coffeescript编译成以下JS: var i, kapa, _i, _le

我试图在CoffeeScript中迭代数组,但有一些奇怪的行为。 例如,查看以下代码:

kapa = [1]
for i in kapa
    console.log 't'
    kapa.push 1
我希望这段代码在控制台中生成无限序列的“t”符号。但实际上,它只打印一个“t”。 这种行为背后的逻辑是什么? 我怎样才能达到预期的行为? 说明:


我想实现所有
新元素
都将被处理时的行为

它只打印一次的原因是因为coffeescript编译成以下JS:

var i, kapa, _i, _len;

kapa = [1];

for (_i = 0, _len = kapa.length; _i < _len; _i++) {
  i = kapa[_i];
  console.log('t');
  kapa.push(1);
}
(但这显然让人泄气,我不知道你为什么想要这种行为)

更新

根据更新后的问题,可以将数组用作类似队列的结构

elements= [1]
while nextElem = elements.shift()
    proccess(nextElem)
    if someCond
      newElement = ...
      elements.push(newElement)

根据您的补充说明,您可能正在将数组用作队列:

elements= [1]
while elements.length
    proccess(elements.shift())
    if someCond
      newElement = ...
      element.push(newElement)

注意使用了while循环(其结束条件在每次迭代时都进行评估)和删除队列第一个元素的
elements.shift

。但我想你大部分时间都在回答我的问题question@kharandziuk:这更有道理!:-)我更新了答案。您的代码更改了初始集合(我不想这样做)。但从您的回答中,我意识到
while
循环是实现预期行为的惯用方法。谢谢
elements= [1]
while nextElem = elements.shift()
    proccess(nextElem)
    if someCond
      newElement = ...
      elements.push(newElement)
elements= [1]
while elements.length
    proccess(elements.shift())
    if someCond
      newElement = ...
      element.push(newElement)