You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript生成器中嵌套yield实现数组内容换行输出?

生成器嵌套yield的问题解决

你这段代码里,forEach里的生成器函数根本没起作用——forEach只会执行这个函数,但不会处理它的迭代器,外层生成器收不到里面yield的值。要实现需求,有两种简单的修改方式:

方法一:用for...of遍历数组逐个yield

let myArray = ["a", "b", "c"]

function* line(array){
  yield "my array"
  // 换成for...of遍历,直接yield每个元素
  for (const v of array) {
    yield v
  }
}

// 遍历生成器,逐个打印到新行
for (const item of line(myArray)) {
  console.log(item)
}

方法二:用yield*委托数组迭代

let myArray = ["a", "b", "c"]

function* line(array){
  yield "my array"
  // 用yield*委托数组的迭代器,直接输出所有元素
  yield* array
}

for (const item of line(myArray)) {
  console.log(item)
}

为什么原代码不行?

原代码里的array.forEach(function*(v){yield v})只是创建了一个生成器函数并调用,但这个生成器的输出没有和外层生成器关联。yield*的作用就是把当前生成器的控制权委托给另一个可迭代对象(比如生成器、数组),让它的所有yield值都能被外层生成器输出。

两种方法都能得到你期望的输出:

my array
a
b
c

内容的提问来源于stack exchange,提问作者serge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:40:37