typescript迭代器实现为生成器[已关闭]

ttygqcqt  于 2023-02-13  发布在  TypeScript
关注(0)|答案(1)|浏览(132)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我想用 generator 实现一个 iterator -我已经很接近了:

class Container {
  private readonly data = new Map<string, Set<string>>()
  public add(level: string, name: string) {
    const names = this.data.get(level);
    if (names === undefined) {
      this.data.set(level, new Set(name))
    } else {
      this.data.set(level, names.add(name))
    }
  }

  *[Symbol.iterator]() {
    for (const [level, names] of this.data.entries()) {
      for (const name of names) {
        yield [level, name]
      }
    }
  }
}

当我用以下代码测试我的代码时:

let c = new Container()
c.add('beginner', 'oren')
c.add('beginner', 'moish')
c.add('advanced', 'uzi')

for (const [level, name] of c) {
  console.log(`name: ${name} ---> level: ${level}`)
}

我的行为有点奇怪,我做错了什么?

$ npx tsc --downlevelIteration main.ts
$ node ./main.js
name: o ---> level: beginner
name: r ---> level: beginner
name: e ---> level: beginner
name: n ---> level: beginner
name: moish ---> level: beginner
name: u ---> level: advanced
name: z ---> level: advanced
name: i ---> level: advanced
jv4diomz

jv4diomz1#

  • 原来我在Set(name)构造函数中犯了错误,该构造函数迭代级别的名字的字母
  • 将代码更改为new Set([name])效果很好

相关问题