2016-02-29 29 views
4

在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 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) 
+1

我试图避免这种情况哈哈 – MuriloKunze

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

的传播操作另一种方法是只使用Array.from这需要可迭代的源,并从它创建一个数组:

function* gen() { 
    yield 1; 
    yield 2; 
    yield 3; 
} 
var result = Array.from(gen()); 
相关问题