在JavaScript中从生成器创建数组

Create Array from Generator in JavaScript

本文关键字:创建 数组 JavaScript      更新时间:2023-09-26

我想在JavaScript中从生成器的值创建一个数组。生成器创建一个动态长度的序列,如下所示

function* sequenceGenerator(minVal, maxVal) {
    let currVal = minVal;
    while(currVal < maxVal)
        yield currVal++;
}

我想将这些值存储在数组中,但是使用next()直到生成器完成似乎不是最好的方法(并且看起来相当丑陋)。

var it, curr, arr;
it = sequenceGenerator(100, 1000);
curr = it.next();
arr = [];
while(! curr.done){
    arr.push(curr.value);
}

我可以直接从生成器中创建一个数组吗?如果不是,我是否可以避免/隐藏循环?也许用map或者类似的东西?

一个简短的解决方案可能是:

let list = [...sequenceGenerator(min, max)]

MDN文档

我找到了另一种方法

var arr = Array.from( sequenceGenerator(min, max) );
作品

你可以这样做;

function* sequenceGenerator() {
  let currVal = this.minVal;
  while(currVal <= this.maxVal) yield currVal++;
}
var obj = {minVal: 10, maxVal:20},
    arr;
obj[Symbol.iterator] = sequenceGenerator;
arr = [...obj];
console.log(arr);

虽然你问了一个非常具体的问题,但我想知道你是否在试图解决一个更普遍的问题,即以方便的方式保持生成器结果。如果去的话,你可以试着看看https://github.com/anywhichway/generx。这实际上会让你把生成器当作一个数组来对待,即在它运行后使用数组表示法访问它。