Javascript 产量生成器 - 如何跳过值

标签 javascript yield

我有一个项目集合,我正在尝试使用yield 创建可迭代集合,但由于增加了复杂性,我想排除与特定条件不匹配的值

function getNodes()
{
    for each (let node in my_nodes)
    {
        if ( node.cost < 1000 )
            yield node;
    }
}

这看起来很合理,我使用以下方式调用它:

let nodes = getNodes();
for (let item in nodes)
{
    ....

但是,我发现 item 返回为未定义,导致代码崩溃。我的语法正确吗?有更好的方法吗?如果我可以帮助的话,我宁愿不创建原始列表的精简版本,因为我希望智能地迭代排除的节点。

最佳答案

我无法重现您的问题。是getNodes产生你期望的结果?

function getX() {
    for each (let x in [1, 2, 3, 4]) {
        yield x;
    }
}
let y = getX();
for (let x in y) {
    console.log(x);
}
// 1, 2, 3, 4

您的问题位于 my_nodes或者说没有node拥有特性成本< 1000 .

undefined < 1000 // false

关于Javascript 产量生成器 - 如何跳过值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922914/

相关文章:

Javascript 日期意外自动更新

javascript - eclipse : can't remove default encoding for javascript and json

python - yield 与返回的不同结果

c# - 编译/优化后如何查看 C# 代码?

ruby-on-rails - Rails 检查是否产生 :area is defined in content_for

javascript - nativebase 中的大写按钮

javascript - Safari 说 FormData.entries() 不是函数

python - python 生成器函数中引发的 StopIteration 异常处理

python - "yield item"与 return iter(items) 相比有什么优势?

javascript - 如何删除 react 导航顶部栏中选项卡之间的空白