1

我有一个关于项目的集合,我试图使用 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以未定义的形式返回,导致代码出错。我的语法正确吗?有没有更好的方法来做到这一点?如果可以提供帮助,我宁愿不创建原始列表的精简版本,因为我希望智能地迭代排除的节点。

4

1 回答 1

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
于 2013-06-04T16:44:56.737 回答