我有一个迭代器,我想分解成函数,例如,完整的迭代器:
export function* myIterator(foo) {
for (const xs of foo) {
for (const ys of xs.y) {
for (const zs of ys.z) {
if (zs) {
for (const qs of zs.q) {
if (qs) {
yield qs;
}
}
}
}
}
}
}
收件人:
export function* myIterator(xs) {
for (const ys of xs.y) {
for (const zs of ys.z) {
if (zs) {
for (const qs of zs.q) {
if (qs) {
yield qs;
}
}
}
}
}
}
function* myOuterIterator(foo) {
for (const xs of foo) {
yield myIterator(xs);
}
}
但这不会在 for of
中保持相同的行为。有没有办法重用生成器?
(从 myOuterIterator
中删除 yield 也无济于事)
最佳答案
您可以使用yield*
来生成myIterator
的结果:
function* myIterator(xs) {
for (const ys of xs.y) {
for (const zs of ys.z) {
if (zs) {
for (const qs of zs.q) {
if (qs) {
yield qs;
}
}
}
}
}
}
function* myOuterIterator(foo) {
for (const xs of foo) {
yield *myIterator(xs);
}
}
let f = [
{y: [{z: [{q:[10]}]}, {z: [{q:[20]}]}, {z: [{q:[30]}]}]},
{y: [{z: [{q:[100]}]}, {z: [{q:[200]}]}, {z: [{q:[300]}]}]}
]
let gen = myOuterIterator(f)
console.log([...gen])
关于javascript - 从生成器传播 yield ,同时以相同的方式使用它们(重用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51085476/