在C#中我可以调用方法.ToList()
从一个迭代函数得到的所有结果,这样的:设置生成器函数的结果变量
var results = IterableFunction().ToList();
按照下面的代码,我怎么可以设置结果在一个变量?
function* gen() {
yield 1;
yield 2;
yield 3;
}
var results = ???;
在C#中我可以调用方法.ToList()
从一个迭代函数得到的所有结果,这样的:设置生成器函数的结果变量
var results = IterableFunction().ToList();
按照下面的代码,我怎么可以设置结果在一个变量?
function* gen() {
yield 1;
yield 2;
yield 3;
}
var results = ???;
显然,这个工作:
function* gen() {
yield 1;
yield 2;
yield 3;
}
var results = [...gen()];
我想出了这个用this example on MDN左右摆弄。
有关传播运算符(...
)的信息,请参阅this documentation on MDN。尽管如此,请注意其支持current limited browser。
步步
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)
我试图避免这种情况哈哈 – MuriloKunze
一个辅助函数:
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());
的传播操作另一种方法是只使用Array.from
这需要可迭代的源,并从它创建一个数组:
function* gen() {
yield 1;
yield 2;
yield 3;
}
var result = Array.from(gen());
非常好,谢谢。 – MuriloKunze