JavaScript:JavaScript中是否有“python的生成器”等价物?

时间:2012-06-23 03:07:04

标签: javascript iteration

JavaScript中是否有“python的生成器”等效?

PS: 当我们需要一次迭代数组时,Python的Generator非常节省内存,哈希...
“生成器是可迭代的,但你只能读取它们。这是因为它们不会将所有值存储在内存中,它们会动态生成值

(Python的生成器在此主题中解释:What does the "yield" keyword do in Python?

3 个答案:

答案 0 :(得分:2)

不是标准的方式。一些浏览器already implement python样式的生成器,但它们需要需要显式激活的扩展。 有add generators提议下一版ECMAScript规范,但我不会很快看到它可用。

到目前为止,您可以做的最好的事情是使用旧学校external iterator模式。虽然在更复杂的案例中写作是一种痛苦,但它同样强大。

答案 1 :(得分:2)

它不是超级实用,但你可以达到同样的基本效果:

function make_generator(start, end) {
  var i=start;
  return function() {
    if (i<end) {
      output = i;
      i += 1;
      return output;
    }
    else {
      return null;
    }
  }
}
var out = document.getElementById('out');
var generator = make_generator(1,10);
var g = generator();
while (g) {
  if (out.innerHTML)
    out.innerHTML = out.innerHTML + '<br>' + g;
  else
    out.innerHTML = g;
  g = generator();
}

答案 2 :(得分:0)

在JavaScript 1.7中:

function rangeGen(n) {
    for (let i = 0; i < n; i++)
        yield i;
}