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.
}

我觉得读起来很痛苦。我列出了三次命名空间,只是为了让编译器顺其自然。我应该使用另一种迭代技术吗?这是完成这种形式的迭代的最佳方式吗?

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 回答