在变量中设置生成器函数的结果

时间:2016-02-29 00:03:20

标签: javascript ecmascript-6

在C#中,我可以调用方法.ToList()来获取可迭代函数的所有结果,如下所示:

var results = IterableFunction().ToList();

按照以下代码,我如何在变量中设置结果?

function* gen() { 
  yield 1;
  yield 2;
  yield 3;
}

var results = ???;

4 个答案:

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