JavaScript 中是否有任何“python 的生成器”等价物?
PS:当我们需要对一个大数组进行一次迭代
时,Python的Generator非常节省内存,hash... “生成器是可迭代的,但你只能读取一次。这是因为它们不会将所有值都存储在内存中,他们即时生成价值“
(Python 的生成器在此线程中解释:“yield”关键字在 Python 中的作用是什么?)
JavaScript 中是否有任何“python 的生成器”等价物?
PS:当我们需要对一个大数组进行一次迭代
时,Python的Generator非常节省内存,hash... “生成器是可迭代的,但你只能读取一次。这是因为它们不会将所有值都存储在内存中,他们即时生成价值“
(Python 的生成器在此线程中解释:“yield”关键字在 Python 中的作用是什么?)
这不是超级实用,但你可以达到这样的基本效果:
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();
}
在 JavaScript 1.7 中:
function rangeGen(n) {
for (let i = 0; i < n; i++)
yield i;
}
您可以使用yield
关键字。您可以在此处(MDN)阅读有关它的更多信息。
yield 关键字用于暂停和恢复生成器函数
function* range(n) {
for (let i = 0; i < n; i++) {
yield i;
}
}
const generator = range(10);
console.log(generator.next()); // { value: 0, done: false }
console.log(generator.next()); // { value: 1, done: false }
...
console.log(generator.next()); // { value: 9, done: false }
console.log(generator.next()); // { value: undefined, done: true }
注意关键字*
后面的。function
打字稿符号:
function* range(n: number): IterableIterator<number> {
for (let i = 0; i < n; i++) {
yield i;
}
}