2016-02-29 4 views
4

В C# можно вызвать метод .ToList(), чтобы получить все результаты из итерации функции, например:установить результат функцию генератора в переменных

var results = IterableFunction().ToList(); 

После кода ниже, как я могу установить результат в переменной?

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

var results = ???; 

ответ

4

Видимо это работает:

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

var results = [...gen()]; 

Я придумал это, возиться с this example on MDN.

С информацией об операторе связи (...), посмотрите на this documentation on MDN. Однако имейте в виду его поддержку current limited browser.

+0

Очень хорошо, спасибо. – MuriloKunze

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, который принимает любые Iterable источника и создает массив из него:

function* gen() { 
    yield 1; 
    yield 2; 
    yield 3; 
} 
var result = Array.from(gen()); 
Смежные вопросы