Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在变量中设置生成器函数的结果_Javascript_Ecmascript 6 - Fatal编程技术网

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

Javascript 在变量中设置生成器函数的结果,javascript,ecmascript-6,Javascript,Ecmascript 6,在C#中,我可以调用方法.ToList(),以从iterable函数获取所有结果,如下所示: var results = IterableFunction().ToList(); 按照下面的代码,如何在变量中设置结果 function* gen() { yield 1; yield 2; yield 3; } var results = ???; 一步一步 function* gen() { yield 1; yield 2; yield 3; } var g

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

var results = IterableFunction().ToList();
按照下面的代码,如何在变量中设置结果

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

var results = ???;
一步一步

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);
function* gen() { 
  yield 1;
  yield 2;
  yield 3;
}

var results = [];

for (let prop of gen()) {
  results.push(prop)
}

console.log(results)
另一种方法是使用
for..of
循环

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);
function* gen() { 
  yield 1;
  yield 2;
  yield 3;
}

var results = [];

for (let prop of gen()) {
  results.push(prop)
}

console.log(results)
辅助函数:

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());
显然,这是可行的:

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

var results = [...gen()];
我是通过摆弄来的


有关扩展运算符(
)的信息,请参阅。但是,请注意它的支持。

扩展运算符的一种替代方法就是使用它获取任何iterable源并从中创建数组:

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

我只是想避免这件事,很好,谢谢你。