在变量中设置生成器函数的结果[重复]

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());

【讨论】:

以上是关于在变量中设置生成器函数的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:如何在回调中设置父对象变量

如何在Option android中设置重复的最大计数到getOrElse函数

无法在Zend Framework中设置postDispatch()中的视图变量

在 RxSwift 中设置 TextField 字符的限制 [重复]

代码中设置的自动布局约束未出现在界面生成器中

如何在 build.gradle.kts 中设置 openApi 生成器全局属性