如何在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
相关产品推荐
相关产品推荐

