javascript - 从生成器传播 yield ,同时以相同的方式使用它们(重用)

标签 javascript generator yield reusability

我有一个迭代器,我想分解成函数,例如,完整的迭代器:

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/

相关文章:

javascript - 使用谷歌图表仪表板中的过滤器聚合数据

python - yield 如何在 Python C 代码中工作,好的和坏的部分

python - “yield”关键字有什么作用?

python - 将文本文件拆分为带有特殊分隔符行的部分 - python

javascript - AngularJS 使用 ng-repeat 的垂直表

javascript - 转换每个字符只有 8 位的 UTF-8 字符串

javascript - 根据给定条件对表 tr 进行排序

python - 将 python 3 中的生成器与 +-operator 连接起来

python - 发电机工作奇怪

javascript - 生成器 + promise 并行化 N 个项目