在C#中,我可以调用方法.ToList()
来获取可迭代函数的所有结果,如下所示:
var results = IterableFunction().ToList();
按照以下代码,我如何在变量中设置结果?
function* gen() {
yield 1;
yield 2;
yield 3;
}
var results = ???;
答案 0 :(得分:4)
显然这有效:
function* gen() {
yield 1;
yield 2;
yield 3;
}
var results = [...gen()];
我通过摆弄this example on MDN来想出这个。
有关传播运算符(...
)的信息,请查看this documentation on MDN。但请注意其current limited browser支持。
答案 1 :(得分:3)
扩展运算符的替代方法就是使用Array.from
来获取任何可迭代的源并从中创建一个数组:
function* gen() {
yield 1;
yield 2;
yield 3;
}
var result = Array.from(gen());
答案 2 :(得分:1)
一步一步
function* gen() {
yield 1;
yield 2;
yield 3;
}
var g = gen();
var results = [];
results.push(g.next().value);
results.push(g.next().value);
results.push(g.next().value);
console.log(results);
或者,使用for
循环
function* gen() {
yield 1;
yield 2;
yield 3;
}
var results = [];
for (var g = gen(), curr = g.next(); !curr.done
; results.push(curr.value), curr = g.next());
console.log(results);
另一种方法是使用for..of
循环
function* gen() {
yield 1;
yield 2;
yield 3;
}
var results = [];
for (let prop of gen()) {
results.push(prop)
}
console.log(results)
答案 3 :(得分:0)
辅助功能:
function generator_to_list(generator) {
var result = [];
var next = generator.next();
while (!next.done) {
result.push(next.value);
next = generator.next();
}
return result;
}
然后你的代码:
function* gen() {
yield 1;
yield 2;
yield 3;
}
var result = generator_to_list(gen());