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 に答える