4

Google Closure で定義された列挙型のすべての値を反復処理する最良の方法を見つけようとしています。次の列挙型が定義されているとしましょう。

/**
 * @enum {number}
 */
sample.namespace.Fruit = {
  Orange: 0,
  Apple: 1,
  Banana: 2
};

現在、これを行うために私が見た最良の方法は、次のようなものです。

for (var key in sample.namespace.Fruit) {
    var fruit = /** @type {sample.namespace.Fruit} */ (sample.namespace.Fruit[key]);
    // Make a smoothie or something.
}

読むのは苦痛だと思います。名前空間を 3 回リストアップしているのは、コンパイラーに乗り物に乗ってもらうためだけです。代わりに使用する必要がある別の反復手法はありますか? これは、この形式の反復を達成するための最良の方法ですか?

4

2 に答える 2

5

goog.object.forEach名前空間の繰り返しを回避するために使用できます。

goog.object.forEach(sample.namespace.Fruit,
                    function(value, key, allValues) {
                      // Make some delicious fruit jellies or something.
                    });

ちなみに、ほとんどの場合、@ enumsに文字列キーを使用しないようにして、コンパイラがそれらの名前を変更できるようにします。

于 2012-11-06T21:04:04.263 に答える
2

forループを使用して、オブジェクトを反復処理できます。

var obj = sample.namespace.Fruit;

for(var key in obj) {
    console.log("Fruit :: " + key + " -- " + obj[key])
}

<strong>フィドルを確認する

于 2012-11-06T21:03:44.783 に答える