【问题标题】:How can I yield return an interated object in JavaScript?如何在 JavaScript 中产生返回一个交互对象?
【发布时间】:2021-07-12 08:30:12
【问题描述】:

我正在尝试创建一个迭代器以使用 for..of 循环遍历数组,然后 yield 返回每个对象。但是我没有得到输出,因为我不确定如何成功地使用 yield 关键字。

let items = ["one", "two", "three"];

function myIterator() {

    for (let i of items) {       
        yield i;
        console.log(i);
    }
}

【问题讨论】:

  • 只能在生成器函数中使用yield关键字,即function* myIterator。你应该得到一个SyntaxError: Unexpected identifier。也请告诉我们你是如何调用这个函数的。
  • yield return each object”是什么意思?
  • 如果您不确定如何使用语言功能,StackOverflow 不是提问的地方。我建议您使用可以通过简单的谷歌搜索找到的无数资源来研究它,例如developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 您是否希望这是一个询问有关如何编写循环的问题的地方?

标签: javascript arrays iterator


【解决方案1】:

yield 仅在生成器函数内有效,您使用* 声明该生成器函数。您还需要调用该函数并使用它返回的生成器:

let items = ["one", "two", "three"];

function* myIterator() {
// −−−−−^

    for (let i of items) {       
        yield i;
        // console.log(i);
    }
}

for (const value of myIterator()) {
    console.log(value);
}

(尽管在这种特定情况下,您可以使用yield * 将生成器链接到items 的迭代器。myIterator 的主体实际上就是yield *items;。但我假设myIterator 将添加更多逻辑...)

【讨论】:

  • ……当然,对于这种用法,const myIterator = () => items.values() 会更简单、更高效。
  • @Bergi - 是,或yield* items。但我认为myIterator 会更有逻辑性。
猜你喜欢
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多