Javascript yield generator - 如何跳过值

时间:2013-06-04 16:24:52

标签: 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以未定义的形式返回,导致代码被禁止。我的语法是否正确?有没有更好的方法呢?如果我可以帮助它,我宁愿不创建原始列表的简化版本,因为我希望在排除的节点上智能地迭代。

1 个答案:

答案 0 :(得分:1)

我无法重现您的问题。 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