【问题标题】:How do I iterate over enum values in Google Closure?如何在 Google Closure 中迭代枚举值?
【发布时间】:2012-10-26 21:24:30
【问题描述】:

我正在尝试找到迭代 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.
}

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

【问题讨论】:

    标签: javascript enums iteration google-closure google-closure-library


    【解决方案1】:

    您可以使用goog.object.forEach 来避免命名空间重复。

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

    附带说明一下,在大多数情况下,您希望避免为 @enums 使用字符串键,以便编译器可以重命名它们。

    【讨论】:

    • 如果键是真正的带引号的字符串,编译器不会重命名它们。
    【解决方案2】:

    您可以使用 for 循环 来迭代您的对象..

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

    Check Fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2014-06-09
      • 1970-01-01
      相关资源
      最近更新 更多