在变量中设置生成器函数的结果[重复]
Posted
技术标签:
【中文标题】在变量中设置生成器函数的结果[重复]【英文标题】:set the result of a generator function in a variable [duplicate] 【发布时间】:2016-06-11 22:13:14 【问题描述】:在 C# 中,我可以调用方法 .ToList()
从可迭代函数中获取所有结果,如下所示:
var results = IterableFunction().ToList();
按照下面的代码,如何将结果设置为变量?
function* gen()
yield 1;
yield 2;
yield 3;
var results = ???;
【问题讨论】:
【参考方案1】:显然这是可行的:
function* gen()
yield 1;
yield 2;
yield 3;
var results = [...gen()];
我通过摆弄this example on MDN 想出了这个。
有关扩展运算符 (...
) 的信息,请查看 this documentation on MDN。不过请注意它的current limited browser 支持。
【讨论】:
很好,谢谢。【参考方案2】:扩展运算符的替代方法是使用Array.from
,它接受任何可迭代的源并从中创建一个数组:
function* gen()
yield 1;
yield 2;
yield 3;
var result = Array.from(gen());
【讨论】:
【参考方案3】:一步一步
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)
【讨论】:
我试图避免这种情况哈哈【参考方案4】:辅助函数:
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());
【讨论】:
以上是关于在变量中设置生成器函数的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在Option android中设置重复的最大计数到getOrElse函数
无法在Zend Framework中设置postDispatch()中的视图变量