从生成器传播收益,同时以相同的方式使用它们(重用)
Propagate yield from generators while using them in the same way (reuse)
我有一个迭代器,我想分解成函数,例如,完整的迭代器:
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*
得到 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])
我有一个迭代器,我想分解成函数,例如,完整的迭代器:
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*
得到 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])