JavaScript中是否有“python的生成器”等效?
PS:
当我们需要一次迭代大数组时,Python的Generator非常节省内存,哈希...
“生成器是可迭代的,但你只能读取它们。这是因为它们不会将所有值存储在内存中,它们会动态生成值”
(Python的生成器在此主题中解释:What does the "yield" keyword do in Python?)
答案 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;
}