【问题标题】:Create Array from Generator in JavaScript在 JavaScript 中从生成器创建数组
【发布时间】:2016-12-18 10:14:10
【问题描述】:

我想在 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 或类似的东西?

提前致谢。

【问题讨论】:

    标签: javascript arrays generator


    【解决方案1】:

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

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

    MDN 上的文档

    【讨论】:

      【解决方案2】:

      你可以这样做;

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

      【讨论】:

        【解决方案3】:

        我找到了另一种方式

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

        同样有效。

        【讨论】:

          【解决方案4】:

          虽然您提出了一个非常具体的问题,但我想知道您是否正在尝试解决更普遍的问题,即以方便的方式保留生成器结果。如果去,你可以试试看https://github.com/anywhichway/generx。这实际上会让您将生成器视为一个数组,即在它运行后使用数组表示法访问它。

          【讨论】:

            猜你喜欢
            • 2017-10-11
            • 2018-01-24
            • 1970-01-01
            • 2016-07-09
            • 1970-01-01
            • 2016-01-01
            • 1970-01-01
            • 2018-03-21
            • 2017-08-01
            相关资源
            最近更新 更多