我有一个要分解为功能的迭代器,例如完整的迭代器:
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
中删除收益也无济于事)
答案 0 :(得分:1)
您可以使用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])